2011-05-03 52 views
3

我有一個IIS託管的WCF服務,我需要向其添加端點行爲。我不能將它添加到web.config。 (我們需要支持的插件架構和插件的開發者將無法訪問我的web.config)。我試圖把這個在靜態構造函數的服務:如何添加端點行爲以打開IIS託管的WCF服務

var endpointDispatcher = OperationContext.Current.EndpointDispatcher; 
SilverlightFaultMessageInspector inspector = new SilverlightFaultMessageInspector(); 
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector); 

但它拋出一個異常,說:「這在ServiceHost打開後無法更改值。「如果在添加檢查器對象之前調用host.Close(),它仍會拋出相同的異常。

我嘗試這樣做,以及:

var host = OperationContext.Current.Host; 
host.Description.Endpoints[0].Behaviors.Add(new SilverlightFaultBehavior()); 

但它似乎沒有任何效果。端點行爲永遠不會被調用。

那麼是否可以將端點行爲添加到IIS託管的WCF服務?

+0

拉迪斯拉夫是對的。我還發現以下頁面對此主題很有幫助:[MSDN:Custom Service Host](http://msdn.microsoft.com/zh-cn/library/aa395224%28v=VS.90%29.aspx)[MSDN: ServiceHostFactory類](http://msdn.microsoft.com/en-us/library/system.servicemodel.activation.servicehostfactory%28v=VS.90%29.aspx#Y228) – 2011-08-15 19:54:27

回答

2

端點行爲只能在ServiceHost打開之前添加(開始託管服務)。所以它需要重置您的服務。對於在IIS中託管的服務,訪問ServiceHost是通過自定義ServicHostFactory,它必須在.svc文件中定義。所以你通常需要像定製ServiceHostFactory這樣的東西,它會從某個存儲庫加載行爲並在CreateServiceHost方法中使用它們。僅在重新啓動應用程序後纔會應用行爲。

+0

「重新啓動應用程序後」?因此應用程序將啓動(例如調用global.asax中的Application_Start),ServiceHostFactory將創建服務器主機,然後應用程序將重新啓動(再次調用Application_Start)? 有沒有辦法讓ServiceHostFactory最初使用端點行爲創建服務主機? – 2011-05-04 13:31:56