2010-02-16 2 views
5

Im créant un ServiceFactory pour prendre le contrôle de inicialization de mes services exposés par IIS 7.WCF ServiceHost a déjà 5 comportements

Cependant je suis surpris par le comportement de ServiceHost. Bien que j'ai 0 fichiers de configuration pour le service, partout où j'initialize une nouvelle ServiceHost, comme ceci:

var host = new ServiceHost(typeof(MyService), baseAddresses); 

Ensuite, je veux ajouter quelques comportements que si la construction est en mode débogage:

#if DEBUG 
host.Description.Behaviors.Add(new ServiceDebugBehavior()); 
#endif 

Cependant, ce code échoue car le ServiceDebugBehavior est déjà appliqué! Malgré que je n'ai aucun fichier de configuration, et aucun attribut appliqué à la classe de service, l'hôte a déjà ce comportement et 5 autres sont appliqués!

Est-ce le comportement attendu? Que faire si je veux désactiver le ServiceDebugBehavior à la sortie des versions?

Merci à l'avance,

Répondre

5

Pas facile - Pas de réglage je suis au courant juste désactiver cette. La question est vraiment: quel avantage obtenez-vous de cela ?? De ce que je vois, la plupart de ces comportements sont tout à fait essentiels - authentification et informations d'identification de service et ainsi de suite. Et s'ils sont là par défaut, même sans config, je crois qu'ils sont là pour une raison.

Mais si vous voulez vraiment, vous pouvez toujours créer votre propre CustomServiceHost et faire ce que vous voulez dans cette classe - y compris en jetant tous les comportements prédéfinis, si vous voulez.

Si vous voulez par ex. activer le paramètre IncludeExceptionDetailsInFaults sur le comportement de débogage de service de votre service, essayez ce type de code:

ServiceDebugBehavior behavior = 
     host.Description.Behaviors.Find<ServiceDebugBehavior>(); 

if(behavior != null) 
{ 
    behavior.IncludeExceptionDetailInFaults = true; 
} 
else 
{ 
    host.Description.Behaviors.Add(
     new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true }); 
} 

Dans ce cas, si le ServiceDebugBehavior est déjà présent, vous trouvez et définissez simplement la propriété true - sinon vous créer et ajouter un nouveau ServiceDebugBehavior. Assez facile, je pense.

+0

Weel Je ne me plains pas des comportements que vous dites, comme l'authentification et les informations d'identification du service. Cependant, je pense que c'est bizarre d'inclure DebugBehavior dans le sac. Je ne veux pas exposer ce comportement sur mes services de production. Aussi n'est-ce pas le point d'avoir un DebugBehavior à tous? Il vous permet de le brancher quand cela a du sens. Alors, est-ce le comportement prédéfini de WCF? –

+0

Oui, mais le paramètre 'IncludeExceptionDetailsInFaults' sur' ServiceDebugBehavior' est ** désactivé ** par défaut! À dessein, aussi - ce qui est une bonne chose! –

0

Vous ne devez pas créer le comportement de débogage de service dans #if DEBUG, mais simplement définir les valeurs pour les propriétés que vous souhaitez modifier par défaut.

Questions connexes