2010-08-10 11 views
1

J'ai créé une bibliothèque de service WCF dans VS2010 et pouvez exécuter le service en sélectionnant Déboguer-> Démarrer une nouvelle instance à partir du menu contextuel du projet. Puis-je définir plus en détail une logique d'initialisation qui serait exécutée avant le démarrage du service?Le service WCF Self-hosting peut-il avoir une logique d'initialisation?

EDIT:

Ce que je cherche à atteindre est d'initialiser NHibernate et plusieurs autres éléments afin qu'ils soient prêts quand le service démarre.

+0

Qu'essayez-vous de faire? Quand vous dites 'avant que le service ne commence', voulez-vous dire avant d'appeler 'Open' sur votre' ServiceHost'? –

+0

Je l'ai expliqué dans l'édition dans le message principal. Je n'écris pas ma propre application hôte, je profite simplement de la capacité VS2010 pour exécuter le service WCF défini dans le projet de type 'WCF Servcice Library'. – mgamer

+0

Auto-hôte a une signification spécifique dans WCF, http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx Je recommanderais de changer votre titre –

Répondre

7

Si vous hébergez vous-même (c'est-à-dire écrivez votre hôte WCF vous-même) - assurez-vous, sans problème, de faire ce que vous devez faire avant d'appeler .Open() sur le ServiceHost.

ServiceHost host = new ServiceHost(typeof(YourServiceClass)); 

// do your initialization here 
........ 

host.Open(); 

Si vous utilisez IIS ou WAS ou AppFabric pour héberger votre service WCF: Je doute, puisque ceux-ci sont « message basé » serveur d'activation, par exemple ils démarrent un hôte de service pour gérer une requête à la demande, lorsqu'une requête arrive, et je ne connais aucun point d'extension pour entrer dans le processus d'initialisation si vous utilisez la classe ServiceHost habituelle pour l'hébergement.

Cela dit: vous pouvez de définir bien sûr vos propres descendants de ServiceHost - dériver votre hôte de service personnalisé à partir ServiceHost ou ServiceHostBase - ceux-ci devraient vous donner des points pour entrer dans le processus d'initialisation (redéfinissant la méthode InitializeRuntime, ou de répondre à la Opening un événement).

Voir les MSDN docs:

  • ServiceHostBase classe de base abstraite pour les hôtes un service personnalisé
  • ServiceHost en tant que mise en œuvre concrète de ServiceHostBase pour éventuellement hériter de
  • Custom Service Host expliquant les tenants et les aboutissants de la façon de accomplir tout cela