2010-02-16 37 views
5

I'm創建服務工廠在我的服務通過IIS 7WCF的ServiceHost已經有5種行爲

然而I'm通過的ServiceHost的行爲感到驚訝暴露inicialization進行控制。雖然我的服務,不管我初始化一個新的ServiceHost,這樣0配置文件:

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

接下來,我要添加一些行爲只有構建在調試模式:

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

但是,此代碼失敗,導致ServiceDebugBehavior已被應用!儘管我沒有配置文件,並且沒有應用於服務類的屬性,但主機已經具有此行爲,並且還有5個應用!

這是預期的行爲?如果我想在發佈版本上禁用ServiceDebugBehavior,該怎麼辦?

由於提前,

回答

5

不容易 - 不設定我所知道的只是關閉這個功能。問題的確是:你從中得到什麼好處?

從我所看到的,大部分這些行爲都非常重要 - 認證和服務憑證等等。如果他們在默認情況下,即使沒有配置,我會相信他們在那裏是有原因的。

但是,如果你真的想要,你可以隨時創建自己的CustomServiceHost,並在該課堂內做任何你喜歡的事情 - 包括拋出所有預先定義的行爲,如果你想。

如果你想要例如使你的服務的服務調試行爲IncludeExceptionDetailsInFaults設置,嘗試這種類型的代碼:

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

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

在這種情況下,如果ServiceDebugBehavior是目前已,你找到了,只需設置屬性爲true - 否則你創建並添加新的ServiceDebugBehavior。我覺得很容易。

+0

Weel我沒有抱怨你說的行爲,如認證和服務憑證。 但是我覺得在包裏包含DebugBehavior是很奇怪的。我不想在我的生產服務中暴露這種行爲。也沒有一點DebugBehavior?它可以讓你在有意義時插上它。 那麼這是WCF的預定義行爲? – 2010-02-16 14:09:51

+0

是的,但默認情況下** ServiceDebugBehavior'上的'IncludeExceptionDetailsInFaults'設置被關閉**!也是故意的 - 這是一件好事! – 2010-02-16 14:13:50

0

您不應該在#if DEBUG中創建服務調試行爲,而應該爲您想要從默認值更改的屬性設置值。

相關問題