2010-02-16 14 views
5

sto creando un ServiceFactory per ottenere il controllo inicialization dei miei servizi esposti tramite IIS 7.WCF ServiceHost ha già 5 comportamenti

Tuttavia sto sorpreso dal comportamento di ServiceHost. Anche se ho 0 i file di configurazione per il servizio, ovunque io inizializzare un nuovo ServiceHost, in questo modo:

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

Avanti voglio aggiungere alcuni comportamenti solo se l'accumulo è in modalità debug:

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

Tuttavia, questo codice non funziona, poiché ServiceDebugBehavior è già applicato! Nonostante non abbia file di configurazione e nessun attributo applicato alla classe di servizio, l'host ha già questo comportamento e altri 5 applicati!

È questo il comportamento previsto? Cosa succede se si desidera disattivare il ServiceDebugBehavior sui build di rilascio?

Grazie in anticipo,

risposta

5

Non facilmente - Nessuna impostazione io sappia a poco attivare questa via. La domanda è davvero: quale beneficio ne ricava ??

Da quello che vedo, la maggior parte di questi comportamenti è piuttosto essenziale: credenziali di autenticazione e di servizio e così via. E se sono lì per impostazione predefinita, anche senza configurazione, credo che siano lì per un motivo.

Ma se davvero vuole veramente, si può sempre creare il proprio CustomServiceHost e fare quello che vuoi dentro quella classe - tra cui tirare fuori tutti i comportamenti predefiniti, se si vuole.

Se si desidera ad es. attivare l'impostazione IncludeExceptionDetailsInFaults sul comportamento di debug di servizio del vostro servizio, provate questo tipo di codice:

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

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

In questo caso, se il ServiceDebugBehavior è già presente, a trovarlo e solo impostare la proprietà su true - altrimenti si crea e aggiungi un nuovo ServiceDebugBehavior. Abbastanza facile, penso.

+0

Weel Non mi lamento dei comportamenti che si dicono, come le credenziali di autenticazione e di servizio. Comunque penso che sia strano includere DebugBehavior nella borsa. Non voglio esporre questo comportamento sui miei servizi di produzione. Inoltre non è questo il punto di avere un DebugBehavior a tutti? Ti permette di collegarlo quando ha senso. Quindi questo è il comportamento predefinito di WCF? –

+0

Sì, ma l'impostazione 'IncludeExceptionDetailsInFaults' su' ServiceDebugBehavior' è ** disattivata ** per impostazione predefinita! Di proposito, che è una buona cosa! –

0

Non si deve creare il comportamento di debug del servizio all'interno del DEBUG #if, invece è sufficiente impostare i valori per le proprietà che si desidera modificare rispetto al valore predefinito.

Problemi correlati