2009-09-24 5 views
1

Quelqu'un peut-il recommander une méthode "propre" de fermeture d'un service WCF et de ses threads lorsqu'il est hébergé dans un objet servicehost?Rejoindre des threads dans un service hébergé WCF

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

Cheers,

Rob

Répondre

1

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 consisterait à faire en sorte que le service génère des threads via des moyens spéciaux qui peuvent être contrôlés via votre environnement hôte et que ces threads collaborent en outre afin qu'ils puissent être arrêtés proprement. Par exemple, vous pouvez avoir une classe de pool de threads personnalisée qui donne à chaque thread spawn une référence à un événement qui lui signale qu'il doit arrêter le traitement et l'arrêt. .NET 4.0 va simplifier la tâche avec la bibliothèque de tâches, mais en attendant, vous devrez le faire vous-même.

De même, vous devez faire attention si vous générez des threads bruts (au lieu d'utiliser le pool de threads CLR) pour les créer en tant que threads d'arrière-plan dans des cas comme celui-ci. Cela peut aider à éviter de maintenir le processus en vie lorsque vous voulez qu'il se ferme (bien que je recommande toujours de vous assurer de les fermer proprement).

+0

Merci tomasr, un peu de réflexion m'a amené à la même conclusion. – theGecko

Questions connexes