2010-11-19 5 views
2

Dans une application de service client typique, où le service est WCF, comment utiliser la référence de service? Par exemple, instanciez-vous le service séparément pour chaque appel, ou en ouvrez-vous un et conservez-le pendant la durée de vie de l'application cliente? (quand je fais référence à 'instatiser service', je veux dire instancier l'objet service créé par svcutil)Client WCF - quand le client doit-il fermer le canal

Pour l'instant nous avons utilisé une instance de service sur le client, parce que cela semblait plus rapide que de toujours créer, ouvrir et fermer le service pour chaque et chaque appel, mais maintenant je me promène si c'était OK? Le principal problème que nous avons avec cette approche est que les timeouts se produisent (ou nous devons avoir des sessions ouvertes pendant 10h), les interruptions de connexion etc, et nous devons toujours faire 'IsAlive' via le canal pour nous assurer que tout va bien ...

Si cela est pertinent, l'application est à thread unique, et l'authentification est personnalisée (en insérant des jetons auth dans l'en-tête). La liaison est basicHttp (ou ws, n'a pas vraiment d'importance pour ce cas).

Répondre

1

Personnellement, je préfère garder le canal ouvert jusqu'à ce que l'appel de méthode revienne, puis fermez-le pour libérer des ressources. C'est l'approche la plus propre de tous. L'initialisation de l'instance de proxy chaque fois est une question de millisecondes et n'a jamais affecté mes objectifs de performance. Avoir une sorte de singleton ServiceClient est une idée intéressante, mais comme vous l'avez dit, il y a beaucoup d'effets secondaires, donc je ne suis pas sûr que ce soit une approche intelligente, mais puisque votre application est à simple thread, alors il devrait ne pas être un gros problème et vous aurez probablement de légers avantages en termes de performances.

Si l'enregistrement des millisecondes est critique, vous pouvez également disposer d'un pool de ServiceClients dont vous pouvez obtenir des instances.

Cependant, la première approche est la plus propre. La complexité est mauvaise.

+0

Et comment gérez-vous la sécurité? Nous nous authentifions avant d'ouvrir un canal ... ou considérez-vous simplement que les appels de service à l'intérieur de votre réseau sont sécurisés sans authentification? – veljkoz

+0

Comme dit veljkoz si vous avez le canal sécurisé, alors chaque initialisation du proxy client est très lourde. L'appel de plusieurs méthodes va améliorer les performances. – Artru