我有一个带有一个服务和多个接口\端点的 wcf (.net 4.5)。该服务声明如下:
<service name="MyService.Service1">
<endpoint address="Try1" behaviorConfiguration="restfulBehvaiour"
binding="webHttpBinding" contract="MyService.IService1" />
<endpoint address="Try2" behaviorConfiguration="restfulBehvaiour"
binding="webHttpBinding" contract="MyService.ITry" />
</service>
...
<behavior name="restfulBehvaiour">
<webHttp helpEnabled="true" />
</behavior>
我正在尝试将任何异常作为 json 返回。我已按照http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/上的教程进行操作
简而言之:
1)在svc文件上,添加了这个(它实现了两个接口)
<%@ ServiceHost Language="C#" Debug="true" Service="MyService.Service1" CodeBehind="Service1.svc.cs" Factory="MyService.CustomWebServiceHostFactory"%>
2) CustomWebServiceHostFactory 在哪里
public class CustomWebServiceHostFactory : System.ServiceModel.Activation.WebServiceHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var sh = new ServiceHost(typeof(Service1), baseAddresses);
sh.Description.Endpoints[0].Behaviors.Add(new CustomWebHttpBehavior());
return sh;
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return base.CreateServiceHost(serviceType, baseAddresses);
}
3)和自定义CustomWebHttpHandler是
protected override void AddServerErrorHandlers(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
// clear default error handlers.
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear();
// add our own error handler.
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(new ErrorHandlerEx());
}
4) ErrorHandlerEx 是一些处理异常的类(返回 json 对象)。
这一切都适用于第一个端点 (Try1),但第二个端点 (Try2) 被忽略并且不会抛出 CustomWebServiceHostFactry。
如果我在 web.config 中切换端点的顺序,第一个总是有效的,第二个异常由默认的 wcf 处理程序处理。
我该如何解决这种行为,以便每个端点都按照上述教程的建议工作?