web-dev-qa-db-fra.com

WCF: Qu'est-ce qu'un ServiceHost?

Comme j'apprends actuellement à utiliser les services WCF, je rencontre constamment des didacticiels sur Internet qui mentionnent l'utilisation d'un ServiceHost lors de l'utilisation d'un service WCF.

Qu'est-ce que c'est exactement ServiceHost?


Dans mon projet actuel, j'utilise un service WCF et j'y ai une référence depuis mon application et chaque fois que je veux le consommer depuis mon application, j'instancie simplement son ServiceClient comme ceci:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress);

Et puis accéder à mes méthodes web (OperationContracts) à partir de cette instance (évidemment en l'ouvrant avant de consommer la méthode et en la fermant ensuite avec Open et Close)

Mon service WCF est hôte dans mon IIS et j'accède simplement au .svc depuis mon application pour instancier le ServiceClient.

Alors pourquoi et où ServiceHost est-il utilisé?

38
Andreas Grech

Un ServiceHost vous fournit essentiellement tout ce dont vous avez besoin pour héberger un service WCF dans un paramètre non IIS ou WAS. Un endroit commun pour un ServiceHost serait dans une application console ou un service Windows. Voir l'exemple de code de MSDN pour comment configurer un ServiceHost dans une application console .

32
Andy White

L'implémentation de votre service n'est qu'une classe .NET - vous devez disposer d'un environnement d'exécution pour qu'elle puisse être exécutée d'une manière ou d'une autre. C'est à cela que sert le ServiceHost - il chargera votre classe de service, configurera les points de terminaison et les écouteurs de canal et tout le reste, et donnera ainsi à votre classe de service un "écosystème" pour vivre et fonctionner.

Vous pouvez soit instancier une classe ServiceHost vous-même dans une application console, un service Windows ou même une application Winforms, et ainsi rendre votre classe de service WCF disponible pour le monde extérieur - ou vous pouvez déléguer ce travail à IIS ou WAS. Même IIS ou WAS utilisera un ServiceHost pour héberger votre service WCF - ils le font juste automatiquement en arrière-plan et "à la demande" - chaque fois qu'une demande pour votre WCF le service entre.

Marc

26
marc_s