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

C# IIS中的后台线程意外地在多个进程上运行,c#,asp.net,.net,iis,C#,Asp.net,.net,Iis,好的-忽略你可能看到的任何不良行为,并容忍我,因为我看到的行为对我来说毫无意义 设置: 新的空Asp.Net应用程序(4.5.1运行时,服务器2012 R2)。什么之中的一个 许多在自己的应用程序池中运行的应用程序 使用相同的windows凭据 添加WebActivatex NuGet包。在PreApplicationStart方法中, 启动新线程并连接到RabbitMQ队列并侦听 工作 应用程序池设置为始终运行,应用程序已预加载 关闭(预加载启用=假)。综合管道 每个应用程序池都设置为最大工

好的-忽略你可能看到的任何不良行为,并容忍我,因为我看到的行为对我来说毫无意义

设置:

  • 新的空Asp.Net应用程序(4.5.1运行时,服务器2012 R2)。什么之中的一个 许多在自己的应用程序池中运行的应用程序 使用相同的windows凭据

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

  • 应用程序池设置为始终运行,应用程序已预加载 关闭(预加载启用=假)。综合管道

  • 每个应用程序池都设置为最大工作进程数=1

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

请注意,没有其他应用程序与此新应用程序共享任何代码

注意事项:

  • 打开Preload可以修复它(我只得到一个线程,与正确的进程绑定)
  • 将启动侦听器线程的代码从PreStart方法移动到App_code文件夹中的AppInitialize中,可以修复此问题
  • 在Server2008R2上运行时也会发生同样的情况(它没有预加载,所以我无法在IIS配置中修复它)
问题是:

为什么绑定到一个程序集的代码会突然出现在未加载该程序集的多个进程中运行线程的情况


应用程序池配置/允许多少个工作进程?@ErikPhilips-我想提一下。每个应用程序池只允许有一个进程。应用程序池配置/允许有多少个工作进程?@ErikPhilips-我想提一下。每个应用程序池只允许一个进程。