2010-05-26 5 views
29

La documentation autour de ce sujet est médiocre. J'utilise les services WCF avec NetTcpBinding hébergé dans le service Windows. Le problème est qu'une session est abandonnée lorsqu'elle est inactive pendant un certain temps. Ce dont j'ai besoin, c'est la session qui est toujours vivante. La session fiable de WCF est-elle quelque chose qui peut aider? Ou je peux juste jouer avec les paramètres de délai?Quel est le but de la session fiable WCF?

Répondre

39

Non, une session fiable expirera comme n'importe quelle autre session. La question principale est vraiment: pourquoi diable voulez-vous que vos sessions soient «sans fin»? Si vous en avez réellement besoin, vous devez augmenter les délais d'expiration de la session.

Le point d'une session fiable est que l'appelant saura tout message perdu. Contrairement à la croyance populaire, la session fiable ne peut pas garantir la livraison d'un message - mais si un message ne peut pas être délivré, au moins l'appelant le saura.

Découvrez quelques-unes de ces ressources pour plus d'informations de fond:

+0

Merci pour clarifier ce qui est fiable pour la session. En ce qui concerne la session "sans fin": J'ai un système piloté par les événements. Lorsqu'un message arrive, le client doit appeler un service WCF. Les messages peuvent arriver chaque seconde et il est important de continuer à gérer chacun d'entre eux. Parfois, l'intervalle entre la réception d'un message peut être supérieur à une seconde, disons un ou deux jours. J'ai donc besoin d'un mécanisme de maintien en vie. –

+1

@bsnote: pourquoi? Si l'intervalle entre deux messages est de deux jours, il n'y a vraiment aucun intérêt à avoir cette session active tout le temps, à mon avis .... –

+0

Il est trop coûteux de créer un canal chaque fois qu'un message est reçu au cas où les messages sont reçus chaque seconde. Bien que je sois d'accord qu'il ne sert à rien d'avoir une session quand l'intervalle est d'un jour. –

6

si vous n'utilisez pas le canal, il fermera lui-même après un certain temps. vous pouvez modifier le délai d'attente par défaut (qui est 10 min) de la liaison.

NetTcpBinding binding = new NetTcpBinding(); 
binding.ReceiveTimeout = TimeSpan.MaxValue; 
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue; 

lire plus au MSDN