2011-04-20 2 views
0

J'ai un problème avec une réponse du serveur. Lorsqu'une opération dure plus d'une minute côté serveur, le client ne peut pas obtenir la réponse, mais les journaux indiquent que la réponse est envoyée par le serveur. Tout va bien, quand une opération sur le serveur est inférieure à une minute.Le client ne peut pas obtenir une réponse

config client:

<system.serviceModel> 
<behaviors> 
<endpointBehaviors> 
<behavior name="NewBehavior0"> 
<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
<clientCredentials /> 
</behavior> 
</endpointBehaviors> 
</behaviors> 
<bindings> 
<wsHttpBinding> 
<binding name="WSHttpBinding_B2BServices" closeTimeout="00:10:00" 
openTimeout="00:01:00" receiveTimeout="00:21:00" sendTimeout="00:21:00" 
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" 
allowCookies="false"> 
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
<reliableSession ordered="true" inactivityTimeout="00:15:00" 
enabled="true" /> 
<security mode="TransportWithMessageCredential"> 
<transport clientCredentialType="None" proxyCredentialType="None" 
realm="" /> 
<message clientCredentialType="UserName" negotiateServiceCredential="true" 
algorithmSuite="Default" /> 
</security> 
</binding> 
</wsHttpBinding> 
</bindings> 
<client> 
<endpoint address=https://.../MatrixConnector/Services.svc 
behaviorConfiguration="NewBehavior0" 
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_B2BServices" 
contract="MatrixServiceReference.B2BServices" name="WSHttpBinding_B2BServices"> 
<identity> 
<dns value="..." /> 
</identity> 
</endpoint> 
</client> 
</system.serviceModel> 

côté serveur:

<system.serviceModel> 
<diagnostics> 
<messageLogging logEntireMessage="true" logKnownPii="true" logMalformedMessages="true" 
logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" 
maxMessagesToLog="2147483647" maxSizeOfMessageToLog="2147483647" /> 
<endToEndTracing propagateActivity="true" activityTracing="true" 
messageFlowTracing="true" /> 
</diagnostics> 
<bindings> 
<wsHttpBinding> 
<binding name="WsHttpBinding" 
closeTimeout="00:21:00" openTimeout="00:02:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" 
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
messageEncoding="Mtom"> 
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
<reliableSession enabled="true" inactivityTimeout="00:20:00" /> 
<security mode="TransportWithMessageCredential"> 
<transport clientCredentialType="None" /> 
<message clientCredentialType="UserName" /> 
</security> 
</binding> 
</wsHttpBinding> 
</bindings> 
<services> 
<service behaviorConfiguration="serviceBehavior" name="mediaSens.Services.B2BServices"> 
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding" 
contract="mediaSens.Services.IB2BServices"> 
<identity> 
<dns value="..." /> 
</identity> 
</endpoint> 
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
<host> 
<baseAddresses> 
<add baseAddress=http://.../ /> 
</baseAddresses> 
</host> 
</service> 
</services> 
<behaviors> 
<serviceBehaviors> 
<behavior name="serviceBehavior"> 
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
<serviceDebug includeExceptionDetailInFaults="true" /> 
<serviceCredentials> 
<userNameAuthentication userNamePasswordValidationMode="Custom" 
customUserNamePasswordValidatorType="mediaSens.Services.CustomUserNameValidator, mediaSens.Services" /> 
</serviceCredentials> 
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="2000" 
maxConcurrentInstances="1500" /> 
</behavior> 
</serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="1" /> 
</system.serviceModel> 

Et maintenant je reçois une erreur sur le côté du serveur après 30 minutes:

The communication object, System.ServiceModel.Channels.ReplyChannel, cannot be used for communication because it has been Aborted. 

Toutes les propriétés tous mis au-dessus de 20 minutes et le client ne peut pas gérer avec des opérations qui durent plus d'une minute. Additionaly J'ai fait:

client.InnerChannel.OperationTimeout = new TimeSpan(0, 30, 0); 

... mais aucun résultat.

J'ai augmenté les paramètres des pools d'applications: Ping Response Maximum Timie: 1140 sec Temps d'arrêt Limite: 1200 s période Ping: 30 sec.

J'ai également désactivé la recycilng. Même comportement

J'ai essayé avec relabionSession off mais rien ...

EDIT. J'ai découvert, ce client ne peut pas obtenir une réponse après 90 secondes. C'est une valeur par défaut pour exececutionTime dans IIS. J'ai augmenté cette valeur à 3600 secondes, désactivé le débogage, mais le client ne peut toujours pas récupérer toute réponse après ce moment. J'ai créé le serveur net.tcp et les mêmes résultats, mais dans localhost il n'y a pas un tel problème. Je suis vraiment confus ...

+0

Utilisez-vous Windows Azure? –

+0

"mais les journaux indiquent que la réponse est envoyée par le serveur." Quels journaux? La connexion peut être annulée avant que l'envoi ne soit réellement envoyé. –

+0

Je n'utilise pas Windows Azure. Dans mon fonctionnement sur le serveur, je sauvegarde le journal dans la base de données avant de renvoyer un résultat, plus dans TraveViewer il y a un accion: "Envoyé un message sur un canal" après 2 minutes après invocation (donc c'est correct). Et après 30 minutes, j'ai eu une erreur (voir ci-dessus). – Bruno

Répondre

1
<system.web> 
    <hostingEnvironment idleTimeout="600" shutdownTimeout="700" /> 
    </system.web> 

Ce code a résolu le problème.

0

Augmenter délai d'attente ouvert dans le fichier de configuration client

+0

Cela n'a aucun effet. – Bruno

Questions connexes