J'ai un service WCF hébergé dans IIS7 (le service et la configuration du client se trouvent à la fin de ce post). J'ai traversé un scénario étrange que j'espérais que quelqu'un pourrait avoir des idées sur la façon de l'attaquer et de trouver une solution.Le message de réponse WCF prend 40 minutes et aucune exception de délai d'attente n'est levée
Le service expose uniquement un contrat, 'ProcessMessage'. Je peux envoyer/recevoir des messages synchrones à partir du service en utilisant ce contrat juste avec les performances attendues, mais un appel particulier à ce contrat renvoie plus de 65 Ko de données; environ 1 Mo Lors de l'appel initial, j'ai reçu la taille de réception maximale attendue erreur dépassée. J'ai donc augmenté le maxReceivedMessageSize, et maintenant cet appel particulier prend 40 minutes pour retourner au client. C'est bien au-delà de tous les paramètres de délai d'attente, et bien au-delà de ce que je m'attendrais à ce qu'il prenne. Le temps de traitement côté serveur est de seulement 2 secondes. Il semble être tenu du côté du client.
J'ai également essayé de faire tomber plusieurs des autres quotas dans le fichier en vain.
Toutes les pensées seraient grandement appréciées. Merci.
Config Service:
<system.serviceModel>
<services>
<service behaviorConfiguration="Lrs.Esf.Facade.Startup.FacadeBehavior"
name="Lrs.Esf.Facade.Startup.FacadeService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="default" contract="Lrs.Esf.Facade.Startup.IFacadeService">
<identity>
<servicePrincipalName value="lrsdomain/PensionDev" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="default">
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="Lrs.Esf.Facade.Startup.FacadeBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
client Config:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IFacadeService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:1:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://esf2.facade.testpe.pg.local/FacadeWcf/FacadeService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IFacadeService"
contract="FacadeServiceReference.IFacadeService" name="WSHttpBinding_IFacadeService">
<identity>
<servicePrincipalName value="lrsdomain/PensionDev" />
</identity>
</endpoint>
</client>
J'ai exécuté Fiddler et une trace complète du processus client et j'ai plus d'informations. Le message de réponse revient à l'ordinateur client en quelques secondes (fiddler), mais la trace du journal des messages et le message «Reçu un message sur un canal» ne sont consignés que 40 minutes plus tard. Je suppose qu'il faut 40 minutes pour désérialiser le message. – Mark
J'ai retiré l'hôte de service de IIS et créé un point de terminaison TCP et l'appel d'un PC client revient maintenant dans 5 secondes. Mon hypothèse est maintenant qu'il y a un bogue dans wsHTTP ou un paramètre dans wsHTTP ou IIS qui me manque. – Mark
J'ai activé WAS/TCP et ajouté un point de terminaison TCP au service hébergé IIS. L'appel via TCP ne prend que quelques secondes, mais l'appel via HTTP (basique ou ws) prend encore 40 minutes. – Mark