2010-03-23 2 views
2

Je travaille sur une application Silverlight qui fonctionne avec les services WCF. Lors du chargement des métadonnées de service dans mon navigateur, j'ai remarqué qu'il fournit le code suivant:Silverlight - Fermeture d'un service

class Test 
{ 
    static void Main() 
    { 
     myServiceClient client = new myServiceClient(); 

     // Use the 'client' variable to call operations on the service. 

     // Always close the client. 
     client.Close(); 
    } 
} 

La dernière ligne dit « Toujours fermer le client ». Ma question est, quand devriez-vous fermer le client dans une application Silverlight? Si vous le fermez après votre appel à "[MyServiceOperation] Async" ou devez-vous le fermer dans le gestionnaire d'événements "[MyServiceOperation] Completed"?

Merci,

Répondre

2

Close blocs lorsqu'ils sont utilisés dans un scénario asynchrone.

Il existe aussi une variante asynchrone BeginClose/EndClose du code si vous ne voulez pas que votre code d'appel pour bloquer, mais de ce que je peux voir si vous appelez .Close il attendra jusqu'à ce que vos appels en suspens à résoudre avant .Close retours.

Notez également que l'appelant dans votre gestionnaire Complété peut provoquer des problèmes avec plusieurs appels asynchrones au même objet client ... Je recommande de le faire dans le code d'appel soit avec .Close ou .BeginClose

Mise à jour: From the documentation (bien que quelque peu enterré)

Cette méthode provoque une ICommunicationObject à grâce transition de l'état ouvert à l'état fermé . La méthode Close permet de terminer le travail non terminé avant de revenir. (Pour exemple, finir d'envoyer des messages mises en mémoire tampon.)

...

Fermer retours après est atteint l'état fermé.

Questions connexes