J'appelle une méthode de service WCF à plusieurs reprises dans une boucle (avec différents paramètres à chaque itération) et elle provoque un délai d'attente après environ 40 minutes. J'utilise le même objet proxy et je le ferme seulement quand la boucle est complétée comme ça. comment puis-je éviter cette erreur de timeout? dois-je instancier un nouveau proxy pour chaque appel. (En fait, j'appelle ici un service web de serveur de reporting SQL server et je passe différents params pour générer différents rapports et je n'utilise pas de nouveau proxy pour chaque itération qui pourrait ralentir la génération de rapports). Voici le client est également un service WCF et il est hébergé dans un service Windows.Plusieurs appels à la méthode de service WCF dans une boucle (utilisant le même objet proxy) provoquant le dépassement
(ce qui est juste un exemple d'illustration, et non le code réel qui échoue)
using(var proxy=new serviceclient())
{
for(var i=0;i<50;i++)
{
proxy.methodName(i);
}
}
Le message d'erreur est quelque chose comme ça
System.TimeoutException: La chaîne demande chronométré en attendant une réponse après 00:01:00. Augmentez la valeur de délai d'attente transmise à l'appel à Demandez ou augmentez la valeur SendTimeout dans la liaison. Le temps affecté à cette opération peut avoir été une partie d'un délai d'attente plus long. ---> System.TimeoutException: La requête HTTP à 'http: //localhost/ReportServer/ReportExecution2005.asmx' a dépassé le délai imparti de 00:01:00. Le temps alloué à cette opération a peut-être fait partie d'un dépassement de délai plus long de . ---> System.Net.WebException: L'opération a expiré
est ici la configuration WCF client (seule partie qui est liée aux services d'information, et non l'ensemble de configuration WCF)
<bindings>
<basicHttpBinding>
<binding name="ReportExecutionServiceSoap" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/ReportServer/ReportExecution2005.asmx"
binding="basicHttpBinding" bindingConfiguration="ReportExecutionServiceSoap"
contract="ReportExecutionServiceReference.ReportExecutionServiceSoap"
name="ReportExecutionServiceSoap" />
</client>
Ici, chaque appel de méthode est synchrone, de sorte que le client attendra jusqu'à ce que le rapport soit généré, avant de faire une demande pour un autre rapport. maintenant j'essaye d'instancier et de fermer le proxy pour chaque appel et voir si cela fonctionne. Merci pour la réponse – RKP