2010-08-13 8 views
0

Peut-être que je manque quelque chose de basique ici, alors corrigez-moi si je le suis. J'ai un service local et une application WinForms qui communiquent via WCF, mais il me semble finir avec beaucoup de copies de ce code dans mon application:Gérer fréquemment appelé connexion WCF

Public Shared Sub MyLocalMethod1() 
    Dim tcpBinding As New NetTcpBinding 
    tcpBinding.SendTimeout = New TimeSpan(0, 0, 5) 

    Dim tcpFactory As ChannelFactory(Of MyWCFClass.MyWCFInterface) = New _ 
         ChannelFactory(Of MyWCFClass.MyWCFInterface)(tcpBinding, "net.tcp://localhost:4079") 

    Dim ServiceWCFConnection As MyWCFClass.MyWCFInterface = tcpFactory.CreateChannel 

    ServiceWCFConnection.MyWCFMethod1() 

    tcpFactory.Close() 

End Sub 

Je devrais probablement faire cela dans une sorte de La classe d'assistance qui crée la connexion, permet à mon service de l'utiliser, puis ferme la connexion, donc je n'ai pas plusieurs copies de ce code de connexion. Cependant, devrais-je laisser cette connexion ouverte, ou est-ce logique de la fermer à chaque fois? Le WinForm appelle généralement le service toutes les quelques secondes, il peut donc être plus logique d'essayer d'avoir une copie commune que tous ces différents appels peuvent accéder à chacun, au lieu d'ouvrir une fermeture d'une nouvelle connexion à chaque fois.

Répondre

1

Cela dépend de vos besoins car les deux approches sont correctes. Vous pouvez envelopper votre code de création de chaîne dans une aide. Vous aurez la même fonctionnalité que vous utilisez actuellement avec un seul endroit pour éditer votre code de création de chaîne (principe DRY). L'utilisation du service est plus lente car chaque appel créera une nouvelle connexion TCP. Utilisez une classe d'aide jetable pour représenter votre connexion créée.

Si vous décidez d'utiliser un canal unique (proxy) pour l'ensemble de l'application, vous devez penser à une nouvelle complexité. Vous utilisez la liaison Net.Tcp qui crée une session de transport - la connexion TCP va durer longtemps. De plus, l'instance de service WCF va vivre en même temps que la connexion car le mode d'instanciation par défaut est PerSession. Ainsi, une instance de service unique gérera toutes les demandes de votre client = votre service deviendra à état. De plus, lorsque vous utilisez un canal ouvert pour plusieurs appels, vous devez tester l'état du canal. Un problème de réseau, un problème de serveur, un dépassement de délai ou une exception non gérée passera en état Faulted - ce canal et l'instance de service correspondante ne peuvent plus être utilisés. Vous devez annuler ce canal et en ouvrir un nouveau.

Questions connexes