2010-08-25 15 views
0

J'ai un client wcf.wcf connection gestion des bonnes pratiques

Quelle est la meilleure façon de gérer les connexions?

Est-il pour ouvrir et fermer chaque fois que vous devez contacter le service:

void doSomething(){ 
    MyService service = new MyService(); 
    //try 
    service.doThis(10); 
    ... 
    service.doThat(20); 
    service.Close() 
    // catch 
} 

Ou dois-je garder référence ouverte et l'annuler et ré-initialiser en cas d'erreur de connexion se produit:

class Myclass{ 
    MyService service = new MyService(); 
    ... 
    void myFunction(){ 
    try{ 
     service.doThis(10); 
    }catch(...){ 
     service.abort(); 
     service = new Myservice(); 
     // do something here, but what it a smart thing to to? 
    } 
    } 
} 

Cordialement

Répondre

1

La première approche est commune. La deuxième approche est complètement fausse. L'indice le plus important à votre question est: Si vous fermez/annulez le proxy, vous ne pouvez plus l'utiliser. Il n'ouvre qu'une seule fois. Si vous utilisez la première approche, vous créez un nouveau proxy à chaque fois et vous "ouvrez" une nouvelle connexion. L'ouverture ici peut avoir une signification différente pour différentes liaisons et situations. Après avoir appelé, vous fermez le proxy avec élégance. Cela informera également le serveur de la fermeture de la connexion.

La deuxième approche utilise des étapes similaires à l'exception de la dernière qui ferme la connexion de manière forcée. Cela n'informera pas le serveur de la fermeture de la connexion. Mais vous ne pourrez pas réutiliser la connexion non fermée sur le serveur.

Si vous souhaitez réutiliser le proxy, vous devez le laisser ouvert. Que vous devez gérer une autre complexité avec des délais d'attente sur le serveur (receiveTimeout - par défaut, la connexion est fermée après 10 minutes d'inactivité) et des exceptions non gérées. Si vous disposez d'une connexion ou d'un service basé sur une session, chaque exception non gérée rendra le canal de communication défectueux et vous ne pourrez appeler Abort que sur le canal.

+0

Si la première approche est commune, est-ce que cela fait de l'overhead l'ouverture d'une nouvelle connexion à chaque fois ou le temps système est négligeable? – darpet

+0

Cela dépend du type d'application que vous construisez et de la fréquence des appels. –

+0

Un appel par 5-6 sec, 200 clients en parallèle – darpet