2011-05-30 98 views
4
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) 

这被未处理的异常处理程序捕获。它只是偶尔发生,但带来了灾难性的结果。任何想法如何实际抓住这一个chaps?致命的异常,如何捕捉? System.Net.InternalException:系统错误

UPDATE

现在已经很明显,这只是出现在CPU处于非常高负载下发生的。

+0

@安德鲁真的吗?为什么?你有答案吗? – Tom 2011-05-30 03:33:55

+0

我应该接受哪些问题的答案,我应该选择哪个答案,为什么? – Tom 2011-05-30 03:41:11

+2

谢谢你。我一直在想,所有这些数字和刻度都在哪里。我对你的评论加了一个,所以希望这会给你更多的认可。 – Tom 2011-05-30 04:06:32

回答

4

如果该异常在I/O完成线程抛出基本上不从你我会倾向于开出罚单有任何干预Microsoft Connect。推理:你开始一个异步I/O操作,抛出一个异常,大概是由于它自己在线程池中的连接断开 - 你无法捕捉到。这意味着在异步操作期间掉线的可能性会降低您的应用程序,并且您无法做任何事情。听起来像是我框架中的一个bug。

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

+0

同意。另外,我建议下载[Debugging Tools for Windows](http://msdn.microsoft.com/en-us/windows/hardware/gg463009)并在崩溃模式下使用adplus实用程序('adplus -crash -pn process_name.exe')以获得内存转储,这将有助于MS诊断问题。 – 2011-05-30 20:27:37

+0

这是一个非常有用的答案。 – Thomas 2015-11-23 11:20:02

-1

这听起来像你有一个下降的连接。如果您正在使用Async调用,情况尤其如此。任何时候当连接被删除时尝试访问一个对象时,你都会得到这样的错误。这是一个具有多一点关于它的SO文章:

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

+1

是的。我同意,但我不知道如何捕获这个异常(除了在未处理的异常处理程序中,这个时间太迟了),因为它在IOCompletion线程上抛出。 – Tom 2011-05-30 03:33:18

+0

@Tom - 如果在抛出时本身无法捕获错误(您是否尝试捕获代码中的所有异常以查看它是否真的发生在您的控制之外?),您可以尝试在使用之前检查连接是否被丢弃连接信息。这可能需要在代码中做很多额外的工作,但这是除了捕获异常外唯一可行的选项。 – IAmTimCorey 2011-05-30 03:44:43

+0

嗯。听起来有点......含糊不清。你不确定你的意思。 – Tom 2011-05-30 03:53:53

3

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