2009-06-09 5 views
2

Je souhaite définir un délai d'attente de session de 30 secondes.Délai de session WCF

Pour ce faire, je l'ai écrit:

<wsHttpBinding> 
    <binding name="ServicesBindings"> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate"/> 
     </security> 
     <reliableSession enabled="true" inactivityTimeout="00:00:30"/> 
    </binding> 
    </wsHttpBinding> 

Mais il ne fonctionne pas!

Si je régle ainsi:

<wsHttpBinding> 
    <binding name="ServicesBindings" receiveTimeout="00:00:30"> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate"/> 
     </security> 
     <reliableSession enabled="true"/> 
    </binding> 
    </wsHttpBinding> 

tout est correct.

Quelqu'un peut-il m'expliquer cela?

Merci,

Alberto

Répondre

4

http://msdn.microsoft.com/en-us/library/system.servicemodel.reliablesession.inactivitytimeout.aspx

La combinaison de l'inactivité et de réception des périodes de temporisation détermine le comportement.

+0

merci, Je ne sais pas pourquoi la première exaple n'a pas fonctionné ... – Alberto

+0

@Kwal c'est tellement très étrange, la documentation indique que le plus bas des deux minuteurs est utilisé mais en pratique c'est le plus haut. Comment venir? –

0

Selon this person, il existe un bogue où receiveTimeout remplace le paramètre inactivityTimeout.

1

InactivityTimeout est destiné à la ReliableSession. C'est la durée pendant laquelle le canal restera ouvert pendant qu'aucun message d'application n'est envoyé sur le fil. Ainsi, si vous avez un client pour appeler une opération, puis que vous dormez pendant un certain temps, le délai d'inactivité risque d'endommager le canal client si le client n'envoie pas un autre message au service dans le délai d'attente configuré. ReceiveTimeout est la durée d'une opération de réception individuelle. Par exemple, le client envoie un message au service. Si le service prend plus de temps que ReceiveTimeout pour terminer la lecture de ce message, il sera défectueux. De même, SendTimeout est un délai d'attente pour combien de temps une seule opération d'envoi peut prendre.

Pour le mettre simplement - (Envoyer/Recevoir) Timeout contrôle combien de temps l'envoi et la réception de messages sont autorisés à prendre. InactivityTimeout est un paramètre pour la session et a à voir avec combien de temps vous n'autorisez rien. Si vous activez Fiddler et observez les messages sur le réseau, vous verrez qu'avec un InactivityTimeout important et un temps d'inactivité assez long entre l'envoi des messages, des messages "Keep Alive" envoyés par le ReliableSessionBindingElement sous-jacent s'affichent. maintenir le canal en vie malgré l'absence de communication depuis la couche application.

Questions connexes