我们最近遇到一个问题,所有设置为 .NET 2.0 和集成模式的应用程序池在启动时立即崩溃。
没有任何内容进入 IIS 日志,但是 HTTPERR 日志每次都显示相同的内容:
Line 2084: 2013-11-15 01:33:39 10.71.21.242 57020 192.168.16.26 80 HTTP/1.1 GET / - 129 Connection_Abandoned_By_ReqQueue test
我已经运行了 DebugDiag 并访问了该网站,并得到了一些据我所知相对无用的信息:
In w3wp__test__PID__5196__Date__11_14_2013__Time_03_16_34PM__253__Second_Chance_Exception_E0434352.dmp the assembly instruction at KERNELBASE!RaiseException+3d in C:\Windows\System32\KERNELBASE.dll from Microsoft Corporation has caused a CLR Exception on thread 8
该线程的堆栈跟踪:
Full Call Stack
Function Arg 1 Arg 2 Arg 3 Arg 4 Source
KERNELBASE!RaiseException+3d 000007fe`f9c6839c 00000000`01aed5f8 00000000`00000100 412e6d65`74737800
MSVCR110_CLR0400!_ValidateExecute+718 00000000`00000000 00000000`01aee470 00000000`00000000 00000000`00000000
ntdll!RtlRestoreContext+2e2 00000000`00000000 00000000`029b15f0 00000000`029511d0 00000000`01aeee50
clr!StrongNameTokenFromAssemblyEx+11b636 0000b6b5`b887dd2b 000007fe`00000001 00000000`01aeeeb0 00000000`01aee8e8
clr!PreBindAssemblyEx+6749 0000b6b5`b887dd2b 00000000`00000000 ffffffff`80004000 00000000`00000000
clr!CopyPDBs+8337 00000000`00bbfe20 00000000`0215cb50 000007fe`fb736a10 00000000`00000000
webengine!GetEcb+1ebe 00000000`0215cb50 00000000`010a28e8 00000000`0215cb50 00000000`00000000
webengine!GetEcb+27a1 00000000`0127e49c 00000000`00000000 00000000`00346b70 00000000`0106d520
iiscore+113f 00000000`01292648 00000000`01094c70 00000000`00000000 00000000`010a28e0
iiscore!GetProtocolManager+189eb 00000000`01094c70 00000000`00000000 00000000`00000000 00000000`01292648
iiscore+15d54 00000000`0127e494 00000000`00000012 00000000`00002710 00000000`00000000
iiscore+7cd8 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000
iiscore+a468 00000000`01292640 00000000`01291a80 00000000`01292640 00000000`00000000
iiscore+ab24 00000000`00000000 00000000`01291a20 00000000`00000000 00000000`0106b400
w3dt!UlAtqGetContextProperty+c2 00000000`0106b400 00000000`00000000 000007fe`f14f0000 00000000`0019aa90
w3dt!UlAtqGetContextProperty+8c 00000000`00000000 000007fe`fd833835 00000000`00000000 00000000`00000000
w3tp+1fba 00000000`000005ff 00000000`01291a28 000007fe`fb901080 00000000`00000000
w3tp+2024 00000000`00000000 00000000`0033fc40 00000000`0033fc40 000007fe`f14f0000
w3tp+20a1 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000
kernel32!BaseThreadInitThunk+d 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000
ntdll!RtlUserThreadStart+21 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000
我无法在此上运行 WinDbg,因为在它崩溃之前我无法足够快地进入该进程。
我不太确定这两个特定设置是什么原因造成的(如果我更改为 .NET 4.0 - 或 - 更改为经典模式,网站将会正常工作)。
还值得注意的是:这种情况独立于每个应用程序池中运行的站点而发生 - 它发生在 Sitecore、Umbraco 和静态站点(包括 hello world 应用程序)中
答案1
在与微软进行了长时间的支持协商后,结果发现这是由于以下键被设置为 1 造成的:
HKLM\SOFTWARE\Microsoft\.NETFramework\OnlyUseLatestCLR
将其设置回 0 即可解决问题。