遇到访问冲突时,w3wp.exe会反复崩溃并重新启动,直到应用程序池停止

我使用WebHttp绑定(使用
[WebGet]
)在IIS 7.5(Windows Server 2008 R2)中托管了CLR 4 WCF服务。该服务调用以C ++(Visual Studio 2010)实现的非托管组件。 我故意在非托管组件中添加了访问冲突(通过反复调用指针上的
delete
,通过删除指针调用方法等)来测试转储文件生成设置。访问冲突崩溃了w3wp.exe进程,考虑到CLR 4中的“损坏状态异常”,这并不奇怪。但是,当进程重新启动时(由于IIS中的预热和永远在线设置),同样的请求似乎被重放到服务,以便它再次崩溃w3wp.exe进程。几次(由“最大故障”应用程序池设置控制)后,应用程序池将停止。 我正在使用浏览器作为测试客户端,当重启序列正在进行时,请求仍在进行中。当应用程序池停止时,请求返回
503 Service Unavailable
。 我可以通过在代码周围放置
try...catch
块并使用
[HandleProcessCorruptedStateExceptions]
属性来解决此问题。当我这样做时,w3wp.exe进程不会崩溃。但是,这不是所希望的行为 - 我希望进程崩溃(访问冲突或内存损坏已经足够糟)但我希望它重新启动到干净状态而不重放请求。 我无法使用BasicHttp绑定重现问题。     
已邀请:
这就是HTTP.sys的工作原理(处理较低级别的http请求的内核驱动程序)。它将请求排队并在池/服务器备份后将它们发送到IIS。     

要回复问题请先登录注册