我有一个IIS托管的WCF服务,我需要为其添加端点行为。我不能只将它添加到web.config。 (我们需要支持插件架构,插件编写者将无法访问我的web.config。)我尝试将其放在服务的静态构造函数中:
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 :(得分:2)
只有在ServiceHost
打开(开始托管服务)之前才能添加端点行为。所以它需要重置您的服务。对IIS中托管的服务的ServiceHost
访问权限是通过自定义ServicHostFactory
,必须在.svc文件中定义。因此,您通常需要自定义ServiceHostFactory
之类的东西,它将从某个存储库加载行为并在CreateServiceHost
方法中使用它们。只有在重新启动应用程序后才会应用行为。