如何让WcfFacility和Wcf全局异常处理工作?

时间:2012-11-16 17:27:31

标签: castle-windsor castle wcffacility

我已经部署了我的服务并将Visual Studio连接到流程以在一个Visual Studio实例中进行调试,而在另一个我有一个客户端控制台测试应用程序,我在调试模式下运行,我可以看到我调用的两个服务方法在调试器中,但是在我故意抛出异常的第二个中,我从未看到在ErrorHandlerBehavior中调用的代码。 我对ErrorHandlerBehavior的注册不正确吗?

我想知道我的服务配置中是否需要有行为扩展吗?

我将此全局异常处理基于此example

这是我的服务程序主要方法中的容器注册:

container.AddFacility<WcfFacility>(f => f.CloseTimeout = TimeSpan.Zero);

    container
        .Register(Component.For<WcfProtoType.IServiceProtoType>()
            .ImplementedBy<WcfProtoType.ProtoTypeService>()
            .Named("ProtoTypeService")
            .AsWcfService( new DefaultServiceModel()
                .AddEndpoints(WcfEndpoint
                    .BoundTo(new BasicHttpBinding(BasicHttpSecurityMode.None))
                    .At(baseUrl)

                    ).PublishMetadata(o => o.EnableHttpGet())),Component.For<ServiceBase>().ImplementedBy<MyService>(),
                    Component.For<ErrorHandlerBehavior>().Attribute("scope").Eq(WcfExtensionScope.Services));

1 个答案:

答案 0 :(得分:0)

我查看了Castle Windsor来源,并且我可以告诉EndPointBehavior需要先注册,如下所示:

container
    .Register(Component.For<ErrorHandlerBehavior>().Attribute("scope").Eq(WcfExtensionScope.Services),
        Component.For<WcfProtoType.IServiceProtoType>()
            .ImplementedBy<WcfProtoType.ProtoTypeService>()
            .Named("ProtoTypeService")
            .AsWcfService( new DefaultServiceModel()
                .AddEndpoints(WcfEndpoint
                    .BoundTo(new BasicHttpBinding(BasicHttpSecurityMode.None))
                    .At(baseUrl)
                    ).PublishMetadata(o => o.EnableHttpGet())),Component.For<ServiceBase>().ImplementedBy<MyService>());