2011-05-30 119 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