Question

Je consommais un service WCF et a créé son proxy en utilisant la référence de service VS 2008.

Je cherche le meilleur modèle pour appeler la méthode de service WCF

  • Dois-je créer l'instance proxy client chaque fois que j'appelle la méthode de service et fermez le client dès que je suis fait avec ça? Quand je PROFILES mon application cliente, je pouvais voir qu'il prend beaucoup de temps pour obtenir le canal lors de l'initialisation du client proxy
  • Dois-je utiliser un modèle Singleton pour le proxy client afin que je puisse utiliser la seule fois par exemple et se débarrasser des frais généraux de re-initialisation? Y at-il problème caché avec cette approche?

J'utilise framework .Net 3.5 SP1, avec peu de basicHttp lier la personnalisation.

Était-ce utile?

La solution

Cela dépend; -)

Si vous avez une séquence dans votre application qui nécessite plusieurs appels après l'autre, vous pouvez accrocher au client proxy et continuer à l'utiliser pour faire d'autres appels. Attention cependant à vérifier l'état « faillé » - si une erreur se produit sur le serveur, le canal entre le proxy client et le serveur peut « faute » et donc votre proxy client devient inutilisable

.

En outre - la partie coûteuse est la création du ChannelFactory<T> - vous pouvez essayer de séparer ces deux étapes lorsque vous créez votre proyx client dans le code:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();

accrocher à cette usine de canal, par exemple, cache quelque part

La deuxième étape devrait être beaucoup moins intensive en termes de temps et de puissance:

IYourService client = factory.CreateChannel();

Vous pouvez faire cette étape avant chaque appel (ou une séquence d'appel) et ne devrait pas avoir de mauvaises performances de cela, vraiment.

Je recommande fortement d'éviter singletons autant que possible - il est comme ouvrir une boîte de vers, ne le faites pas à moins que vous absolument, avez positivement à (par exemple pour gérer l'accès à une ressource unique qui est disponible uniquement pour un appelant à un temps).

Marc

Autres conseils

Désolé pour avoir tapé dans une vieille question, mais je voulais ajouter ceci pour faciliter la consultation.

Je suis entièrement d'accord avec marc_s et rally25rs. Donc, commencer par là, mais aussi envisager d'utiliser un proxy ou un emballage qui gère les états défaillants. Voici une question sur le SO qui traite des solutions et ici est une autre bonne solution je suis tombé sur Internet par Corneliu , " Construire un proxy ClientBase réutilisable ". Sa solution génère des emballages qui exposent vos méthodes de service pour plus de commodité et des performances maximales. Je dois encore vérifier si cela fonctionne bien.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top