2011-05-03 57 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