2010-01-03 7 views
7

J'ai un service WCF et un client. Je me connecte à WCF viaVérifier la connexion WCF

ChannelFactoryBase < (de < (TChannel>)>) .. ::. CreateChannel Méthode

J'ai une référence à ICommunicationObject

service WCF peut ne pas fonctionner lors de la connexion ou fermé plus tard. Ce qui est correct façon de vérifier si le service WCF fonctionne. Une manière directe consiste à utiliser le mécanisme CommunicationException. Mais qu'en est-il de la propriété ICommunicationObject.State? Dois-je vérifier si c'est en état d'erreur avant tout appel de méthode WCF? Quelle est la meilleure pratique?

+0

De l'utilisateur @Stix, pour [MSDN] (https://msdn.microsoft.com/fr-fr/library/ms733912 (v = vs.110) .aspx): Vérification de la valeur de la propriété ICommunicationObject.State est une condition de concurrence et n'est pas recommandé pour déterminer s'il faut réutiliser ou fermer un canal. –

Répondre

13

Il n'y a aucun moyen magique de vérifier si un service WCF fonctionne - autre que de l'appeler et d'être prêt à gérer les exceptions qui surviennent s'il ne fonctionne pas.

ICommunicationObject.State vous indiquera seulement qu'un canal entre le client et le serveur est "défectueux", si une opération précédente a abouti à une erreur et que cette erreur n'a pas été correctement gérée sur le serveur (et donc le canal a été "fauché" ", par exemple rendu inutile). Vous pouvez - si vous contrôlez les deux extrémités du fil - inclure une méthode de ping "factices" (ou quelque chose comme le renvoi du numéro de version du service) pour pouvoir appeler d'abord quelque chose comme ça, canal de communication est toujours en vie. Mais alors: quel est le véritable avantage de l'appel MyService.Ping() et de devoir gérer d'éventuelles exceptions si le service n'est pas actif, puis d'appeler votre méthode actuelle, au lieu de simplement appeler MyService.MyMethod() et gérer les exceptions pertinentes?

+0

Merci, Je me demande pourquoi il ya ICommunicationObject.Faulted événement et ICommunicationObject.State pour? Si je pouvais les utiliser d'une manière ou d'une autre –

+0

L'événement "Faulted" peut être traité pour être informé immédiatement d'un canal qui est en défaut, par ex. vous pourriez ensuite recréer le proxy, par exemple. L'État a plus que l'état «Faulted», mais il n'indique pas si le service est «vivant» ou non. –

+1

Pourquoi ne pas appeler Proxy.Open()? –

Questions connexes