5 Stimmen

Die WCF ServiceHost hat bereits 5 Verhaltensweisen.

Ich erstelle eine ServiceFactory, um die Kontrolle über die Initialisierung meiner über IIS 7 bereitgestellten Dienste zu erlangen.

Allerdings bin ich überrascht über das Verhalten von ServiceHost. Obwohl ich 0 Konfigurationsdateien für den Dienst habe, wo auch immer ich einen neuen ServiceHost initialisiere, wie zum Beispiel:

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

Als nächstes möchte ich einige Verhaltensweisen hinzufügen, nur wenn das Build im Debug-Modus ist:

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

Dieser Code schlägt jedoch fehl, da das ServiceDebugBehavior bereits angewendet wird! Trotz fehlender Konfigurationsdateien und fehlender Attribute für die Dienstklasse hat der Host bereits dieses Verhalten und 5 weitere angewendet!

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

Vielen Dank im Voraus,

5voto

marc_s Punkte 701497

Nicht einfach - es gibt keine Einstellung, von der ich wüsste, um dies einfach auszuschalten. Die Frage ist wirklich: Welchen Nutzen haben Sie davon??

Soweit ich sehe, sind die meisten dieser Verhaltensweisen ziemlich wesentlich - Authentifizierung und Dienstzugriffsberechtigungen und so weiter. Und wenn sie standardmäßig vorhanden sind, selbst ohne Konfiguration, würde ich glauben, dass sie aus einem Grund vorhanden sind.

Aber wenn Sie wirklich möchten, können Sie immer Ihren eigenen CustomServiceHost erstellen und in dieser Klasse tun, was Sie wollen - einschließlich dem Entfernen aller vordefinierten Verhaltensweisen, wenn Sie möchten.

Wenn Sie z. B. die Einstellung IncludeExceptionDetailsInFaults im Dienstdebug-Verhalten Ihres Dienstes aktivieren möchten, versuchen Sie diesen Code:

ServiceDebugBehavior verhalten = 
       host.Description.Behaviors.Find();

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

In diesem Fall, wenn das ServiceDebugBehavior bereits vorhanden ist, finden Sie es und setzen einfach die Eigenschaft auf true - ansonsten erstellen und fügen Sie ein neues ServiceDebugBehavior hinzu. Ziemlich einfach, denke ich.

0voto

Pablote Punkte 4194

Sie sollten das Debug-Verhalten des Dienstes nicht innerhalb von #if DEBUG erstellen, sondern einfach die Werte für die Eigenschaften setzen, die Sie von den Standardeinstellungen ändern möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X