0

サービスをデプロイし、Visual Studio をプロセスにアタッチして 1 つの Visual Studio インスタンスでデバッグしました。別のインスタンスには、デバッグ モードで実行するクライアント コンソール テスト アプリケーションがあり、呼び出した両方のサービス メソッドがデバッガーで実行されたことを確認できます。 、しかし、意図的に例外をスローする2番目のものでは、 ErrorHandlerBehavior のコードがまったく呼び出されません。ErrorHandlerBehavior の登録は正しくありませんか?

このために、サービス構成に動作拡張が必要かどうか疑問に思いますか?

この例に基づいてグローバル例外処理を行いました

サービス プログラムのメイン メソッドでのコンテナー登録は次のとおりです。

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));
4

1 に答える 1

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>());
于 2012-11-16T22:51:21.650 に答える