2011-05-30 2 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) 

Cela a été intercepté par le gestionnaire d'exceptions non gérées. Cela se produit seulement de temps en temps, mais avec des résultats désastreux. Des idées sur comment attraper ce gars-là?Exception mortelle, comment attraper? System.Net.InternalException: erreur système

MISE À JOUR

Il est maintenant devenu évident que cela ne semble se produire lorsque le processeur est en charge exceptionnellement élevée.

+0

@Andrew vraiment? Pourquoi? avez-vous la réponse? – Tom

+0

Laquelle de mes questions devrais-je accepter? Quelles réponses dois-je choisir et pourquoi? – Tom

+2

Merci pour cela. Je me demandais ce que tous ces chiffres et tiques sont partout. J'ai ajouté un sur vos deux commentaires, donc j'espère que cela vous donnera un peu plus de reconnaissance. – Tom

Répondre

4

Si cette exception est levée sur un fil d'achèvement E/S essentiellement sans aucune intervention de votre part je serais enclin à ouvrir un ticket Microsoft Connect. Raisonnement: Vous démarrez une opération d'E/S asynchrone qui déclenche une exception probablement en raison d'une perte de connexion tout seul sur le pool de threads - que vous ne pouvez pas attraper. Cela signifie qu'il est possible qu'une connexion interrompue pendant une opération asynchrone arrête votre application et que vous ne puissiez rien y faire. Cela ressemble à un bug dans le cadre pour moi.

Une solution de contournement temporaire peut être de placer un <legacyUnhandledExceptionPolicy enabled="1"/> dans la section <runtime> de la configuration de votre application. Cela reviendra au comportement .NET 1.0/1.1 où les exceptions lancées sur un autre thread que le thread principal ne seront pas retirer l'application. Voir aussi: http://msdn.microsoft.com/en-us/library/ms228965.aspx

+0

D'accord. De plus, je vous recommande de télécharger les [Outils de débogage pour Windows] (http://msdn.microsoft.com/en-us/windows/hardware/gg463009) et d'utiliser l'utilitaire adplus en mode crash ('adplus -crash -pn process_name.exe') afin d'obtenir un vidage de la mémoire qui aidera Microsoft à diagnostiquer le problème. –

+0

C'est une réponse très utile. – Thomas

-1

Il semble que vous ayez une connexion interrompue. Cela sera particulièrement vrai si vous utilisez des appels asynchrones. Chaque fois que vous essayez d'accéder à un objet lorsque la connexion a été supprimée, vous obtiendrez une erreur comme celle-ci. Voici un article SO qui a un peu plus à son sujet:

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

+1

Oui. Je suis d'accord, mais je ne sais pas comment attraper cette exception (sauf dans le gestionnaire d'exception non gérée, à ce moment-là il est trop tard) car il est jeté sur le thread IOCompletion. – Tom

+0

@Tom - Si vous ne pouvez pas attraper l'erreur elle-même lorsqu'elle est lancée (avez-vous essayé d'attraper toutes les exceptions sur votre code pour voir si cela se passe vraiment hors de votre contrôle?), Vous pouvez essayer de voir si la connexion est supprimée les informations de connexion. Cela pourrait prendre beaucoup de travail supplémentaire dans votre code, mais c'est la seule option viable que je vois au-delà du recouvrement de l'exception. – IAmTimCorey

+0

Hmm. Ça a l'air un peu ... nébuleux ... je ne sais pas trop ce que vous voulez dire. – Tom

3

Nous avons eu ce même problème et avons pu obtenir de l'aide du support de Microsoft à ce sujet. Pour nous cela a été causé par une condition de concurrence dans l'API de Winsock causée par la désactivation de l'algorithme de Nagle. Vous pourriez vouloir vérifier mon article de blog si vous vous trouvez dans la même situation: ASP.NET Serialization Exception Crash, winsock and Nagle Algorithm.

Questions connexes