0

WCFFacility を使用して、ホストされた (IIS 7.5) 環境からサービスをセットアップしています。必要なのは、サービスごとに 2 つのエンドポイントを提供することです。.NET クライアントには WSHttp を、それ以外のすべてのクライアントには WebHttp を提供します。これは可能ですか?

使用するコード:

_container.Register(
    Component
        .For<ISomeService>()
        .ImplementedBy<SomeService>()
        .AsWcfService(new DefaultServiceModel()
        .Hosted()
        .PublishMetadata(mex => mex.EnableHttpGet())
        .AddEndpoints(
            WcfEndpoint.BoundTo(new WSHttpBinding()).At("v1/ws"),
            WcfEndpoint.BoundTo(new WebHttpBinding()).At("v1/rest")
        ))
    );

その後:

RouteTable.Routes.Add(new ServiceRoute("", new DefaultServiceHostFactory(_container.Kernel), typeof(ISomeService)));

ws/web エンドポイントを実際に混在させることはできないと思いますが、他の方法でこれを実現できますか? xml 構成にフォールバックしたくはありませんが、エンドポイントを構成する必要があります。

4

1 に答える 1

1

一日中掘り下げて試した後、私は解決策を見つけました。最終的にヘルプ/wsdl ページを取得すること以外はテストされていません。ということで、質問はしばらく保留にします。

_container.Register(
    Component
    .For<ISomeService>()
    .ImplementedBy<SomeService>()
    .AsWcfService(new RestServiceModel().Hosted())
    .AsWcfService(new DefaultServiceModel().Hosted()
        .PublishMetadata(mex => mex.EnableHttpGet())
        .AddEndpoints(
            WcfEndpoint.ForContract<ISomeService>().BoundTo(new WSHttpBinding())
        )
    )
);

RouteTable.Routes.Add(new ServiceRoute("v1/rest", new WindsorServiceHostFactory<RestServiceModel>(_container.Kernel), typeof(ISomeService)));
RouteTable.Routes.Add(new ServiceRoute("v1/ws", new WindsorServiceHostFactory<DefaultServiceModel>(_container.Kernel), typeof(ISomeService)));
于 2013-02-04T10:03:52.970 に答える