J'ai une application ASP.NET exécutée sur un serveur client (W2k3, IIS6, .NET 2.0). FWIW, il s'agit d'une instance de test , elle n'a pas encore été déplacée en production . Il ne fonctionne donc pas sous SSL, l'équilibrage de charge, etc.
Lorsque j'accède à l'une des pages de leur serveur depuis notre bureau, la page est affichée une fois. L'inspection des journaux IIS (c: WINDOWS \ system32 \ LogFiles \ W3SVC1) affiche un GET pour cette page, puis j'appuie sur un bouton de la page et le fichier journal affiche un POST. Cela semble bien fonctionner jusqu'à présent.
Maintenant, lorsque je me connecte au réseau du client et accède à la page à partir de l'une de leurs machines locales, le fichier journal affiche un GET, puis j'appuie sur le bouton de la page et le journal affiche deux POST à la même seconde. Le premier affiche le statut (sc-status, sc-substatus, sc-win32-status) 200 0 64, le second affiche 200 0 0.
Dans le fichier journal, les deux POST sont identiques. Fondamentalement, le journal ressemble à ceci (sauf que j'ai masqué certaines données):
#Fields: date heure s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs (User-Agent) sc-status sc-substatus sc-win32-status 2009-08-11 20:19:32 xxxx GET /File.aspx - 80 - aaaa Mozilla / 4.0 + (compatible; + 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 - aaaa Mozilla / 4.0 + (compatible; + 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 - aaaa Mozilla / 4.0 + (compatible; + 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
Le problème est que la page est frappée deux fois. La base de données effectue une opération pour la première demande, puis la deuxième demande détecte qu'une opération en double est en cours et émet un message d'erreur. Les utilisateurs pensent que leur opération a échoué, mais elle a réussi.
La description d'erreur de sc-win32-status 64 est: "Le nom de réseau spécifié n'est plus disponible." Cela m'amène à croire, étant donné que les deux demandes POST affichent un état HTTP 200, que le serveur réussit à servir la demande, mais le client n'est jamais averti et soumet à nouveau la demande.
Comment puis-je résoudre ce problème?
Des idées sur ce qui pourrait être à l'origine de ce comportement sur leur réseau interne uniquement?
Je dois mentionner que cela se produit sur deux sites clients distincts, mais ne se produit pas sur six de nos autres sites clients, ou dans nos bureaux, ou en se connectant à l'un de nos huit clients sur le Web.
Qu'est-ce qui pourrait rendre cela reproductible 100% du temps sur leur réseau local mais 0% du temps ailleurs?
Mise à jour: J'ai trouvé qu'un très petit nombre des demandes POST dupliquées avaient un statut sc-win32 de 995 au lieu de 64 comme indiqué initialement. La description d'erreur de sc-win32-status = 995 est: "L'opération d'E / S a été abandonnée en raison d'une sortie de thread ou d'une demande d'application." Cela n'a aucun sens (étant donné que j'ai un accès complet au code). Je ne comprends toujours pas comment ou pourquoi ce problème se produit, mais le nouveau code d'erreur me porte à croire qu'il ne s'agit peut-être pas d'un problème de réseau après tout et j'étudie maintenant la possibilité d'un bogue de code aléatoire.