2010-02-16 19 views
5

Estoy creando un ServiceFactory para ganar control sobre inicialization de mis servicios expuestos a través de IIS 7.WCF ServiceHost ya cuenta con 5 comportamientos

Sin embargo Estoy sorprendido por el comportamiento de ServiceHost. Aunque no tengo 0 archivos de configuración para el servicio, donde quiera que inicializar una nueva ServiceHost, así:

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

siguiente que desee agregar algunos comportamientos sólo si la construcción es en modo de depuración:

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

Sin embargo, este código falla porque el ServiceDebugBehavior ya está aplicado. A pesar de que no tengo archivos de configuración ni atributos aplicados a la clase de servicio, ¡el host ya tiene este comportamiento y se aplicaron 5 más!

¿Es este el comportamiento esperado? ¿Qué sucede si quiero deshabilitar el ServiceDebugBehavior en versiones de lanzamiento?

Gracias de antemano,

Respuesta

5

No es fácil - No hay ajuste Soy consciente de que acaba de desactivar esta opción. La pregunta realmente es: ¿qué beneficio obtienes de eso?

Según lo que veo, la mayoría de esos comportamientos son bastante esenciales: credenciales de autenticación y servicio, etc. Y si están allí por defecto, incluso sin configuración, creo que están ahí por una razón.

Pero si realmente lo desea, siempre puede crear su propio CustomServiceHost y hacer lo que quiera dentro de esa clase, incluso descartar todos los comportamientos predefinidos, si lo desea.

Si quiere, p. habilitar la configuración IncludeExceptionDetailsInFaults sobre el comportamiento de depuración de servicio de su servicio, intenta este tipo de código:

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

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

En este caso, si el ServiceDebugBehavior ya está presente, lo encuentras y acaba de establecer la propiedad en true - de lo contrario crear y agregar un nuevo ServiceDebugBehavior. Bastante fácil, creo.

+0

Weel No me quejo de los comportamientos que dices, como las credenciales de autenticación y servicio. Sin embargo, creo que es extraño incluir DebugBehavior en la bolsa. No quiero exponer este comportamiento en mis servicios de producción. ¿No es ese el objetivo de tener un DebugBehavior en absoluto? Le permite enchufarlo cuando tenga sentido. ¿Es este el comportamiento predefinido de WCF? –

+0

Sí, pero la configuración 'IncludeExceptionDetailsInFaults' en' ServiceDebugBehavior' está ** desactivada ** de manera predeterminada. A propósito, también, ¡lo cual es bueno! –

0

No debe crear el comportamiento de depuración de servicio dentro de #if DEPURACIÓN, en su lugar, simplemente establezca los valores de las propiedades que desea cambiar de forma predeterminada.

Cuestiones relacionadas