2010-06-17 7 views
3

J'ai un service WCF que je consomme dans mon code et généré en tant que classe ChannelFactory. Je sais que la bonne façon de consommer le WCF est de créer le ChannelFactory (appelons ce AwesomeClient), faire le travail, puis appeler Close() dessus. Voici mon extrait:WCF: Comparaisons entre la fermeture de ChannelFactory et la recréation constante de ChannelFactory et sa fermeture

public static void DoSomething() 
    { 
     var client = new AwesomeClient(); 
     client.DoSomethingAwesome(); 
     client.Close(); 
    } 

Cependant, je me attends à ce que DoSomething sera appelé assez souvent (par exemple 10 fois par minute?), Donc les conseils que j'ai obtenu est à instancier le ChannelFactory comme une instance statique, et Toujours réutiliser la même instance, et ne jamais avoir à la fermer (parce que c'est «moins cher» que de toujours recréer le ChannelFactory et de le fermer ensuite).

Je suis ici pour un deuxième avis, quelqu'un peut-il me dire pourquoi ne pas appeler Fermer et réutiliser l'instance statique est une bonne idée? Ou devrais-je m'en tenir à recréer le ChannelFactory et le fermer() pour chaque appel?

Répondre

3

10 fois par minute n'est pas si souvent. 10 fois par seconde je voudrais au moins envisager de réutiliser le canal.

Il y a beaucoup d'inconnues dans votre cas pour prendre une bonne décision. Combien de clients vont se connecter au service? Quel type de connexion est-ce (y a-t-il une chance que cela ne dure qu'une fraction de seconde), y a-t-il un équilibreur de charge? Procuration? En passant, si vous décidez d'ouvrir et de fermer le canal à chaque fois, il n'est pas nécessaire de recréer la ChannelFactory. Gardez cela statique, ouvrez et fermez un nouveau canal à chaque fois. La plupart du temps la création d'une usine consomme plus de ressources.

+0

J'ai décidé d'ouvrir et de fermer un nouveau canal pour chaque appel. Merci pour le pointeur. – Klaw

Questions connexes