18

1 つの WCF サービスで複数のサービス コントラクトをホストすることは可能ですか? もしそうなら、どのように?私はグーグルで調べてきましたが、いくつかの投稿はあなたがそれを行うことができると言っています(ただし方法はできません)。他の投稿はそれが不可能だと言っています。

サーバーを実行すると、次のエラーが発生します。

コントラクト名「ConsoleAppWcfCommon.IBarService」が、サービス「ConsoleAppWcfServer.FooService」によって実装されたコントラクトのリストに見つかりませんでした。

これは私のサーバーコードです:

    static void Main(string[] args)
    {
        string serviceAddress = "net.tcp://localhost:8088/FooBarService";

        // I'm stuck here as I have to pick *one* service
        ServiceHost selfServiceHost = new ServiceHost(typeof(FooService));            

        // I can add both endpoints here, but this is what gives me the error.
        selfServiceHost.AddServiceEndpoint(typeof(IFooService), new NetTcpBinding(), serviceAddress);
        selfServiceHost.AddServiceEndpoint(typeof(IBarService), new NetTcpBinding(), serviceAddress);

        selfServiceHost.Open();
        Console.ReadLine();
        selfServiceHost.Close();
    }

そして、これはクライアントコードです:

    static void Main(string[] args)
    {
        NetTcpBinding netTcpBinding = new NetTcpBinding();

        EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8088/FooBarService");

        // Call IFooService
        var channelFactoryFoo = new ChannelFactory<IFooService>(netTcpBinding, endpointAddress);
        IFooService channelFoo = channelFactoryFoo.CreateChannel();
        Debug.WriteLine(channelFoo.FooMethod1());

        // Call IBarService
        var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding, endpointAddress);
        IBarService channelBar = channelFactoryBar.CreateChannel();
        Debug.WriteLine(channelBar.BarMethod1());
    }

私の目標は、クライアントが Foo (または Bar) を呼び出して、それぞれに使用可能なメソッドのみを表示できるようにすることです。私の実際のアプリケーションでは、約 10 個のドメイン エンティティがあり、それぞれに約 4 つの操作があります。40 個のメソッドを含む 1 つのインターフェイスを持たないようにしています。そして、これを行うために 10 個の異なる WCF サービスをホストする必要はありません。

4

1 に答える 1