Question

Nous avons une application Web ASP.NET en cours d'exécution dans IIS qui utilise la classe SoapHttpClientProtocol pour faire des appels SOAP. Au cours des derniers jours plusieurs machines XP ont commencé à signaler des erreurs de délai d'attente lors des appels de services SOAP.

Trace de la pile à partir d'une application de test:

System.Net.WebException: The operation has timed out
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at TestWS.localhost.Service1.HelloWorld() in C:\Prototypes\TestWS\Web References\localhost\Reference.cs:line 78
   at ASP.default_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer) in c:\Inetpub\wwwroot\TestWS\Default.aspx:line 17

En utilisant TCP / Trace et Wireshark nous pouvons voir que l'en-tête de la demande est envoyée, mais pas le contenu. Cependant, le paramètre HTTP de longueur de contenu est correct, il est presque comme si le flux de contenu n'a pas été vidées.

Nous soupçonnons une mise à jour de Microsoft a causé ce problème. KB970430 , et href="http://support.microsoft.com/KB/968389" rel="nofollow noreferrer"> KB968389 . Le problème semble être isolé à 5.x IIS (version XP de IIS).

Était-ce utile?

La solution

UPDATE :. Cette avéré être un problème avec antivirus ESET en cours d'exécution sur le serveur Web et l'exécution sur la volée vérification des connexions HTTP à partir du serveur Web vers un serveur SOAP

Description complète : Pour mémoire c'est un défaut dans le protocole HTTP manipulation dans .NET. Le scénario est le suivant:

Le client envoie en-tête HTTP POST:

POST /WS/Test.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3603) 
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://testuri.org/HelloWorld"
Host: loadtest-app
Content-Length: 288
Expect: 100-continue
Connection: Keep-Alive

Le contenu n'est pas envoyé à cause d'Expect: 100 Continuer. Le serveur répond maintenant:

HTTP/1.1 100 Continue

A ce moment, le client ne répond pas. Une solution pour cela est de désactiver le 100-continue qui force essentiellement l'en-tête de demande et le contenu à envoyer en un seul morceau. Cela peut se faire dans le web.config avec:

<system.net>
   <settings>
      <servicePointManager expect100Continue="false"/>
   </settings>
</system.net>

Cependant, si on passe également l'enregistrement de trace côté client sur alors une exception de protocole est lancé indiquant que CR doit être suivi de LF en-têtes HTTP. Il semble y avoir un code fragile dans la logique de réseau .Net quelque part. Et pour récapituler ce n'est un problème avec ASP.NET dans IIS 5.1 (la version qui fonctionne sur XP).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top