2010-12-11 7 views
1

Je viens de créer une bibliothèque de service WCF. J'ai créé une fonction de test et j'ai appelé la fonction de test du client de test WCF. J'avais mis un point de rupture dans le code. Le contrôle atteint le point de rupture et s'arrête là. Maintenant, je laisse le contrôle de rester au point de rupture pendant environ une minute le message d'erreur suivant:WCF affichant une erreur de délai d'attente

Impossible d'appeler le service Causes possibles: Le service est hors ligne ou inaccessible, la configuration côté client ne correspond pas au proxy, le proxy existant n'est pas valide Reportez-vous à la trace de la pile pour plus de détails Vous pouvez essayer de récupérer en démarrant un nouveau proxy, en restaurant la configuration par défaut ou en actualisant le service.

Détails de l'erreur: La chaîne de requête a expiré en attendant une réponse après 00: 00: 59.9843750. Augmentez la valeur de délai d'attente transmise à l'appel pour demander ou augmenter la valeur SendTimeout sur la liaison. Le temps alloué à cette opération peut avoir été une partie d'un délai d'attente plus long.

trace de pile du serveur: à System.ServiceModel.Channels.RequestChannel.Request (message du message, Délai d'TimeSpan) à System.ServiceModel.Channels.ClientReliableChannelBinder 1.RequestClientReliableChannelBinder 1.OnRequest (canal TRequestChannel, un message Message, TimeSpan temporisation, MaskingMode maskingMode) à System.ServiceModel.Channels.ClientReliableChannelBinder 1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode) at System.ServiceModel.Channels.ClientReliableChannelBinder 1.Demande (message du message, délai d'attente TimeSpan) à System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request (Message message, délai d'attente TimeSpan) à System.ServiceModel. Dispatcher.RequestChannelBinder.Request (Message, TimeSpan timeout) à System.ServiceModel.Chan nels.ServiceChannel.Call (String action, Boolean oneway, opération ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) à System.ServiceModel.Channels.ServiceChannel.Call (Action de chaîne, Boolean oneway, Opération ProxyOperationRuntime, Objet [] ins, Object [] out) à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, opération ProxyOperationRuntime) à System.ServiceModel.Channels.ServiceChannelProxy.Invoke (message IMessage)

Exception relancée à [ 0]: à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & MSGDATA, le type Int32) à ITrustmarkService.StartRobotProcess() à TrustmarkServiceClient.StartRobotProcess()

Toute idée est la cause?

Répondre

2

Ceci est un exemple configuration client WCF de MSDN:

<bindings> 
      <wsHttpBinding> 
       <binding name="WSHttpBinding_ISampleService" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" 
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
        allowCookies="false"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="Message"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" 
          algorithmSuite="Default" establishSecurityContext="true" /> 
        </security> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 

vous devez définir receiveTimeout et sendtimout à la valeur appropriée, vous pouvez voir la configuration similaire dans un fichier de configuration de votre test.

+0

@Sidharth Pour être complètement correct, vous devez définir both [binding.receiveTimeout] (https: // msdn.microsoft.com/en-us/library/system.servicemodel.channels.binding.receivetimeout(v=vs.110).aspx) ainsi que [binding.ReliableSession.InactivityTimeout] (https://msdn.microsoft. com/fr-fr/library/system.servicemodel.reluxession.inactivitytimeout (v = vs.110) .aspx) puisque l'un de ces deux expirant fermera la connexion. Ces deux paramètres peuvent être modifiés dans le fichier .config, comme ci-dessus, ou dans le code. – AlwaysLearning

0

Oui. Par défaut, le service WCF a un délai de réponse de 1 minute configuré. Cela signifie que les clients peuvent attendre jusqu'à une minute et s'ils n'obtiennent pas de réponse dans ce délai, ils peuvent supposer une réponse échouée/aucune réponse.

Dans votre cas, vous tenez le service WCF en utilisant un point d'arrêt pour répondre à la demande du client. Et après avoir attendu une minute, le client expire et n'attend plus.

Vous pouvez augmenter ce délai d'attente à partir du fichier .config du service WCF.

+0

Pouvez-vous dire où je peux changer cela dans le fichier .config? – Sidharth

+0

http://stackoverflow.com/questions/424358/increasing-the-timeout-value-in-a-wcf-service – decyclone

Questions connexes