Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 遇到访问冲突时,w3wp.exe崩溃并重复重新启动,直到应用程序池停止_Asp.net_Clr_W3wp - Fatal编程技术网

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

Asp.net 遇到访问冲突时,w3wp.exe崩溃并重复重新启动,直到应用程序池停止,asp.net,clr,w3wp,Asp.net,Clr,W3wp,我有一个CLR 4 WCF服务托管在IIS 7.5(Windows Server 2008 R2)中,使用WebHttp绑定(使用[WebGet])。服务调用C++中实现的非托管组件(VisualStudio 2010)。 我故意在非托管组件中添加了访问冲突(通过重复调用指针上的delete,通过删除的指针调用方法等),以测试转储文件生成设置。访问冲突导致w3wp.exe进程崩溃,考虑到CLR 4中的“损坏状态异常”,这并不奇怪。但是,当进程重新启动时(由于IIS中的预热和始终打开设置),相同的

我有一个CLR 4 WCF服务托管在IIS 7.5(Windows Server 2008 R2)中,使用WebHttp绑定(使用
[WebGet]
)。服务调用C++中实现的非托管组件(VisualStudio 2010)。 我故意在非托管组件中添加了访问冲突(通过重复调用指针上的
delete
,通过删除的指针调用方法等),以测试转储文件生成设置。访问冲突导致w3wp.exe进程崩溃,考虑到CLR 4中的“损坏状态异常”,这并不奇怪。但是,当进程重新启动时(由于IIS中的预热和始终打开设置),相同的请求似乎会重播到服务,从而使w3wp.exe进程再次崩溃。几次之后(由“最大故障”应用程序池设置控制),应用程序池停止

我使用浏览器作为测试客户机,当重新启动序列正在进行时,请求仍在运行中。当应用程序池停止时,请求返回时
503服务不可用

我可以通过在代码周围放置
try…catch
块并使用
[HandleProcessCorruptedStateExceptions]
属性来解决这个问题。当我这样做时,w3wp.exe进程不会崩溃。但是,这不是期望的行为——我希望进程崩溃(访问冲突或内存损坏已经够严重了),但我希望它重新启动到干净的状态,而不是让请求重播


我无法使用BasicHttp绑定重现问题。

这就是HTTP.sys的工作方式(在较低级别上处理HTTP请求的内核驱动程序)。它会对请求进行排队,并在池/服务器备份后将其发送到IIS。

是否可能只是将请求从正在关闭的进程转移到新创建的池,从而导致新池崩溃?我的意思是,与服务器上专门重播的请求相反,请确认它是同一个请求。请求不会自动重试,尤其是来自浏览器的请求。@John Saunders是的,这是同一个请求。我的意思是在网络方面。是什么导致请求被重新提交?这不会自动发生。我在Fiddler中只看到过一次。我不相信它会重新提交到服务器。它以某种方式存在于服务器中。