2009-02-03 9 views
1

Je suis curieux de savoir comment j'organiserais mon service pour arrêter proprement le serveur sur lequel le service sera installé. Par exemple, lorsque de nombreux clients se connectent et effectuent des opérations à chaque minute et que je souhaite arrêter le service pour la maintenance, comment puis-je le faire dans l'événement "OnStop" du service pour laisser le service principal refuser toute nouvelle connexions client et laissez les connexions en cours se terminer avant d'arrêter ses services au client, ce qui garantira que les données ne sont pas corrompues sur le serveur lorsque le serveur est arrêté.WCF Service auto-hébergé, nettoyage du client à l'arrêt du service

En ce moment, je ne suis pas configuré en tant que singleton car j'ai besoin d'évolutivité dans le service. Donc, je devrais en quelque sorte obtenir mon hôte de service pour le faire indépendamment de savoir combien d'instances sont créées de la classe de service.

Répondre

0

Pour accomplir cette tâche. J'ai dû créer une référence de service de lui-même et dans le service Windows OnStop initier une nouvelle connexion et changer les valeurs dans le service WCF pour "fermer" (c'était juste un booléen partagé que le service était en ligne ou hors ligne) le service si nouveau les clients ne seraient pas en mesure de se connecter (une fonction que le client appelait pour voir si le serveur était en ligne ou hors ligne) et les connexions existantes auraient le temps de finir, puis après la déconnexion des clients, continuer à fermer le service WCF en utilisant la méthode .Close.

2

Vous devez simplement appeler Dispose sur l'instance ServiceHost que vous créez. Une fois cela fait, vous n'accepterez plus de clients et le service continuera à terminer les opérations pour les clients déjà connectés.

+0

Est-ce que "serviceHost.Close()" serait appelé avant "serviceHost.Dispose()" ou est-ce que tout ce dont j'ai besoin est "serviceHost.Dispose()" car il prendra en charge le .Close? – ScottN

+0

@Sentax: Ils sont identiques. Vous pouvez appeler soit/ou. – casperOne

+0

Mon serviceHost ne possède pas de méthode .Dispose, j'appelle la méthode .Close dans l'événement OnStop. J'ai essayé ceci quand un client était connecté et faisait des choses et il fermait toujours le serveur et le client devait encore être déconnecté. – ScottN