Question

Quelqu'un peut-il recommander une façon « propre » de la fermeture d'un service WCF et ses fils lorsque hébergé dans un objet ServiceHost?

Calling servicehost.Close (); ne fonctionne pas lorsque le service a donné naissance à d'autres threads: /

Cheers,

Rob

Était-ce utile?

La solution

C'est vraiment quelque chose que vous ne pouvez pas faire de l'extérieur en toute sécurité, sans la collaboration du service lui-même et les fils qu'elle a donné naissance. Une option serait d'avoir les fils de spawn de service par des moyens spéciaux qui peuvent être contrôlés par votre environnement d'accueil et ont ces fils collaborent en outre de manière à pouvoir être arrêté proprement.

Par exemple, vous pourriez avoir un fil de classe personnalisée de la piscine qui donne à chaque spawn de fil une référence à un événement qui signale à ce qu'il doit arrêter le traitement et l'arrêt. .NET 4.0 va vous simplifier la tâche avec la bibliothèque de tâches, mais en attendant vous allez devoir le faire vous-même.

En outre, vous devez prendre soin si vous fraie des fils premières (au lieu d'utiliser le pool de threads CLR) pour les créer en tant que fils de fond dans des cas comme celui-ci. Cela peut aider à éviter maintenir le processus en vie quand vous le voulez de fermer (si je vous recommande toujours en vous assurant de les fermer proprement).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top