如何添加端点行为以打开IIS托管的WCF服务

时间:2011-05-03 20:23:23

标签: wcf iis wcf-endpoint endpointbehavior

我有一个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服务?

1 个答案:

答案 0 :(得分:2)

只有在ServiceHost打开(开始托管服务)之前才能添加端点行为。所以它需要重置您的服务。对IIS中托管的服务的ServiceHost访问权限是通过自定义ServicHostFactory,必须在.svc文件中定义。因此,您通常需要自定义ServiceHostFactory之类的东西,它将从某个存储库加载行为并在CreateServiceHost方法中使用它们。只有在重新启动应用程序后才会应用行为。