2010-02-16 4 views
5

Ich bin ein Servicefactory Erstellen Kontrolle über inicialization meiner Leistungen bis 7. IIS ausgesetzt zu gewinnenWCF Servicehost hat bereits 5 Verhalten

aber ich bin durch das Verhalten der Servicehost überrascht. Obwohl ich für den Dienst 0 Konfigurationsdateien haben, wo immer ich ein neues Servicehost initialisieren, wie folgt aus:

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

Nächstes möchte ich nur einige Verhaltensweisen hinzufügen, wenn der Build in Debug-Modus ist:

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

Dieser Code schlägt jedoch fehl, weil das ServiceDebugBehavior bereits angewendet wird! Obwohl ich keine Konfigurationsdateien und keine Attribute für die Serviceklasse habe, hat der Host bereits dieses Verhalten und 5 mehr angewendet!

Ist dies das erwartete Verhalten? Was ist, wenn ich das ServiceDebugBehavior bei Release-Builds deaktivieren möchte?

Vielen Dank im Voraus,

Antwort

5

nicht leicht - keine Einstellung, die mir bewusst bin, um diese einfach auszuschalten. Frage ist wirklich: Was nützt dir das?

Von dem, was ich sehe, sind die meisten dieser Verhaltensweisen sehr wichtig - Authentifizierung und Service-Credentials und so weiter. Und wenn sie standardmäßig da sind, auch ohne Config, würde ich glauben, dass sie aus einem bestimmten Grund da sind.

Aber wenn Sie wirklich wirklich wollen, können Sie immer Ihre eigenen CustomServiceHost erstellen und tun, was auch immer Sie mögen in dieser Klasse - einschließlich des Herauswerfens aller vordefinierten Verhaltensweisen, wenn Sie möchten.

Wenn Sie z.B. ermöglichen die IncludeExceptionDetailsInFaults Einstellung auf dem Service-Debug-Verhalten Ihres Service, versuchen, diese Art von Code:

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

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

In diesem Fall, wenn die ServiceDebugBehavior bereits vorhanden ist, können Sie es finden und legen Sie einfach die Eigenschaft auf true - sonst Sie Erstellen und fügen Sie einen neuen ServiceDebugBehavior hinzu. Ziemlich einfach, denke ich.

+0

Weel Ich habe keine Beschwerden über die Verhaltensweisen, die Sie sagen, wie Authentifizierung und Service-Credentials. Allerdings denke ich ist seltsam, DebugBehavior in die Tasche zu integrieren. Ich möchte dieses Verhalten bei meinen Produktionsdiensten nicht offen legen. Ist es auch nicht der Punkt, ein DebugBehavior zu haben? Sie können es anschließen, wenn es Sinn macht. Also ist dies das vordefinierte Verhalten von WCF? –

+0

Ja, aber die Einstellung 'IncludeExceptionDetailsInFaults' im' ServiceDebugBehavior' ist ** standardmäßig ausgeschaltet **! Mit Absicht auch - was gut ist! –

0

Sie sollten das Service-Debug-Verhalten nicht innerhalb des #if DEBUGs erstellen, sondern nur die Werte für die Eigenschaften festlegen, die Sie ändern möchten.

Verwandte Themen