致命异常,怎么抓? System.Net.InternalException:系统错误

时间:2011-05-30 03:19:24

标签: c# .net exception asynchronous httpwebrequest

System.Net.InternalException: System error.
   at System.Net.HttpWebRequest.CheckWriteSideResponseProcessing()
   at System.Net.ConnectStream.ProcessWriteCallDone(ConnectionReturnResult retur
nResult)
   at System.Net.HttpWebRequest.WriteCallDone(ConnectStream stream, ConnectionRe
turnResult returnResult)
   at System.Net.ConnectStream.CallDone(ConnectionReturnResult returnResult)
   at System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean abort
ing)
   at System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeSta
te)
   at System.Net.ConnectStream.CloseInternal(Boolean internalCall)
   at System.Net.HttpWebRequest.EndWriteHeaders_Part2()
   at System.Net.HttpWebRequest.EndWriteHeaders(Boolean async)
   at System.Net.HttpWebRequest.WriteHeadersCallback(WebExceptionStatus errorSta
tus, ConnectStream stream, Boolean async)
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
   at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
   at System.Net.ContextAwareResult.Complete(IntPtr userToken)
   at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr u
serToken)
   at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32
 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32
errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

这是由未处理的异常处理程序捕获的。它只会偶尔发生,但会带来灾难性的后果。任何想法如何真正抓住这一个人?

更新

现在很明显,这只会在CPU处于极高负载时才会出现。

3 个答案:

答案 0 :(得分:4)

如果在I / O完成线程上抛出此异常,基本上没有您的任何干预,那么我倾向于使用Microsoft Connect打开一张票。推理:你启动了一个异步I / O操作,它会抛出一个异常,可能是由于它在线程池上的连接断开 - 你无法捕获它。这意味着在异步操作期间断开连接可能会导致您的应用程序失效,而您无法对其执行任何操作。听起来像是框架中的一个错误。

临时解决方法可能是在应用配置的<legacyUnhandledExceptionPolicy enabled="1"/>部分放置<runtime>。这将恢复到.NET 1.0 / 1.1行为,其中在主线程之外的另一个线程上抛出的异常不会取消应用程序。另见:http://msdn.microsoft.com/en-us/library/ms228965.aspx

答案 1 :(得分:3)

我们遇到了同样的问题,并且能够从此获得Microsoft支持方面的帮助。对我们来说,这是由我们禁用Nagle算法导致的winsock api中的竞争条件引起的。如果您发现自己处于相同的情况,可能需要查看我的博文:ASP.NET Serialization Exception Crash, winsock and Nagle Algorithm

答案 2 :(得分:-1)

听起来你的连接断开了。如果您使用异步调用,则尤其如此。每次在连接断开时尝试访问对象时,都会出现这样的错误。这是一篇SO文章,它有更多关于它的内容:

What is this error? System.Net.InternalException in Net.HttpWebRequest.SetAndOrProcessResponse