Ich habe eine ASP.NET-Anwendung, die auf einem Client-Server (W2k3, IIS6, .NET 2.0) ausgeführt wird. FWIW, dies ist eine Testinstanz , die noch nicht in die Produktion verschoben wurde . Es läuft also nicht unter SSL, Load Balancing usw.
Wenn ich von unserem Büro aus auf eine der Seiten auf ihrem Server zugreife, wird die Seite einmal getroffen. Beim Überprüfen der IIS-Protokolle (c: WINDOWS \ system32 \ LogFiles \ W3SVC1) wird ein GET für diese Seite angezeigt. Anschließend drücke ich eine Schaltfläche auf der Seite und in der Protokolldatei wird ein POST angezeigt. Dies scheint bisher gut zu funktionieren.
Wenn ich jetzt eine Remote-Verbindung zum Netzwerk des Clients herstelle und von einem der lokalen Computer aus auf die Seite zugreife, wird in der Protokolldatei ein GET angezeigt. Dann drücke ich auf die Schaltfläche auf der Seite und im Protokoll werden zwei POSTs gleichzeitig angezeigt. Der erste zeigt den Status (sc-Status, sc-Substatus, sc-win32-Status) 200 0 64, der zweite zeigt 200 0 0.
In der Protokolldatei sind beide POSTs identisch. Grundsätzlich sieht das Protokoll folgendermaßen aus (außer dass ich einige Daten maskiert habe):
#Felder: Datum Uhrzeit s-ip cs-Methode cs-uri-Stamm cs-uri-Abfrage s-Port cs-Benutzername c-ip cs (Benutzer-Agent) sc-Status sc-Substatus sc-win32-Status 2009-08-11 20:19:32 xxxx GET /File.aspx - 80 - JJJJ Mozilla / 4.0 + (kompatibel; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0 2009-08-11 20:19:45 xxxx POST /File.aspx - 80 - JJJJ Mozilla / 4.0 + (kompatibel; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch 0,0) 200 0 64 2009-08-11 20:19:45 xxxx POST /File.aspx - 80 - JJJJ Mozilla / 4.0 + (kompatibel; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0
Das Problem ist , dass die Seite zweimal aufgerufen wird. Die Datenbank führt eine Operation für die erste Anforderung aus, dann erkennt die zweite Anforderung, dass eine doppelte Operation ausgeführt wird, und gibt eine Fehlermeldung aus. Die Benutzer glauben, dass ihre Operation fehlgeschlagen ist, aber es ist tatsächlich gelungen.
Die Fehlerbeschreibung von sc-win32-status 64 lautet: "Der angegebene Netzwerkname ist nicht mehr verfügbar." Dies lässt mich glauben, dass der Server die Anforderung erfolgreich bearbeitet, da beide POST-Anforderungen einen HTTP-Status von 200 aufweisen, der Client jedoch nie benachrichtigt wird und die Anforderung erneut sendet.
Wie kann ich das beheben?
Irgendwelche Ideen, was dieses Verhalten nur in ihrem internen Netzwerk verursachen könnte?
Ich sollte erwähnen, dass dies an zwei verschiedenen Kundenstandorten geschieht, jedoch nicht an sechs unserer anderen Kundenstandorte oder in unserem Büro oder bei der Verbindung zu einem unserer acht Kunden über das Internet.
Was könnte dazu führen, dass dies 100% der Zeit in ihrem lokalen Netzwerk reproduzierbar ist, aber 0% der Zeit irgendwo anders?
Update: Ich habe festgestellt, dass eine sehr kleine Anzahl der duplizierten POST-Anforderungen den sc-win32-Status 995 anstelle von 64 hatte, wie ursprünglich berichtet. Die Fehlerbeschreibung von sc-win32-status = 995 lautet: "Die E / A-Operation wurde aufgrund eines Thread-Exits oder einer Anwendungsanforderung abgebrochen." Dies macht keinen Sinn (wenn man bedenkt, dass ich vollen Zugriff auf den Code habe). Ich verstehe immer noch nicht, wie oder warum dieses Problem auftritt, aber der neue Fehlercode lässt mich glauben, dass es sich möglicherweise doch nicht um ein Netzwerkproblem handelt, und ich untersuche jetzt die Möglichkeit eines zufälligen Codefehlers.