Traiter avec WCF service de redémarrer sur le côté client
J'ai un client graphique qui est en cours d'exécution à l'encontre d'un WCF services hébergés en tant que service Windows sur un serveur de la boîte. Le service WCF est en cours d'exécution dans PerCall InstanceContextMode, et le client a un singleton instance du service client et je veux éviter reinstantiating le singleton sur chaque appel, car elle rend la vie difficile pour les nombreux appels asynchrones j'ai.
Le problème pour moi est, après le service Windows redémarré, chaque fois que le client effectue un appel, il obtient un message d'exception comme ceci:
Ce canal ne peut plus être utilisé pour envoyer des messages que la sortie de la session a été auto-fermée en raison d'un initiées par le serveur de l'arrêt. Soit désactiver la fermeture automatique en définissant la DispatchRuntime.AutomaticInputSessionShutdown à faux, ou envisager de modifier l'arrêt de protocole avec le serveur distant.
Quelle est la meilleure façon de contourner ce problème? Je peux mettre try-catch clauses autour de tous les appels vers le service client et retrouver l'instance du singleton sur la communication des exceptions, mais qui va impliquer beaucoup de code réutilisable..
OriginalL'auteur theburningmonk | 2009-12-31
Vous devez vous connecter pour publier un commentaire.
Le mieux serait d'éviter les exceptions sur le serveur tous ensemble. Si un WCF Serveur rencontre une exception qui n'est pas détectés et gérés, il la "faute", le canal, le rendant inutilisable.
Sur le côté serveur, vous pouvez mettre en œuvre la IErrorHandler interface et de l'attraper .NET exceptions, de les transformer en SAVON pour les défauts qui sera remis au client avec plus de grâce, sans défaillant le canal.
De cette façon, vous pouvez fourre-tout .NET exceptions sur le serveur, et de les convertir dans interopérables SAVON défauts qui ne seront pas à l'origine de ces problèmes.
Pour plus d'informations, voir:
Le problème avec cette ProtocolException est que l'état de canal est toujours "Ouvert", pas "Reproché", et il est très difficile de constater qu'il est en fait inutilisable.
Et que faire quand le service WCF est hébergé sur IIS et plutôt que d'être redémarré en raison d'une exception, le service est redémarré à avoir été re-déployé?
OriginalL'auteur marc_s
Vous pouvez prendre un coup d'oeil à ce que, peut-être d'éviter certains de code réutilisable:
http://wcfproxygenerator.codeplex.com
OriginalL'auteur Kwal