IIS中的后台线程意外地在多个进程上运行

时间:2015-09-18 15:52:50

标签: c# asp.net .net iis

好的 - 忽略你可能会看到的任何不良做法并对我施加影响,因为我所看到的行为对我来说毫无意义。

设置:

  • 新的空Asp.Net应用程序(4.5.1运行时,Server 2012 R2)。之一 许多应用程序在他们自己的应用程序池中运行,但都是 使用相同的Windows凭据。

  • 添加WebActivatorEx NuGet包。在PreApplicationStart方法中, 启动一个新线程并连接到RabbitMQ队列并监听 工作

  • 应用程序池设置为始终运行,应用程序具有预加载 关闭(Preload Enabled = False)。综合管道。

  • 每个应用程序池都设置为Maximum Worker Processes = 1.

以这种方式配置,当我查看Rabbit服务器时,我看到在我的服务器上运行的每个w3wp.exe进程都有一个侦听器(由IP和端口标识)。我可以通过查看“netstat -ano”的输出并将PID与我的任务管理器中的PID和Rabbit服务器上列出的端口进行比较来验证这一点。

请注意,其他任何应用程序都不会与此新应用程序共享任何代码。

注意事项:

  • 转动Preload修复它(我只得到一个线程,绑定到正确的进程)。
  • 将启动侦听器线程的代码从PreStart方法移动到App_Code文件夹中的AppInitialize会修复它。
  • 在Server 2008 R2上运行时似乎发生了同样的事情(它没有预加载,所以我无法在IIS配置中修复它。)

问题:

  

如何绑定到一个程序集的代码突然出现在多个没有加载该程序集的进程中运行线程?

0 个答案:

没有答案