複数のバインディングでwcfサービスの選択されたメソッドをホストする

アビナウ・シン

私はインタビューでこの質問をされました、そして私はまだ答えを知りません。

質問は、サービスに5つの運用契約があるということです。1つのバインディングでそれらすべてをホストしたいと思います。たとえば、httpと、別のバインディングで2つだけをホストします。したがって、これら2つのメソッドは、バインディングと重複なしの両方でホストする必要があります。

これをどのように行うのですか?それも可能ですか?

steve16351

はい、可能です。インターフェイスコントラクトを次のように構成して、1つのエンドポイントでのみ使用できるようにするメソッドを分離できます。

[ServiceContract]
interface ILimitedAvailabilityOp
{
    [OperationContract]
    string OpB();
}

[ServiceContract]
interface IAllOfMyOps : ILimitedAvailabilityOp
{
    [OperationContract]
    string OpA();
}

したがって、合計で2つのメソッドがあり、どちらもIAllOfMyOps継承介しILimitedAvailabilityOpて使用でき、1つのバインディングでのみ使用できるようにする操作があります。サービスの実装では、すべての操作を次のように実装します。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyService : IAllOfMyOps
{
    public string OpA()
    {
        return "A";
    }

    public string OpB()
    {
        return "B";
    }
}

サービスインスタンスを作成するとき、2つの異なるバインディングを持つ2つの異なるエンドポイントを使用して次のように実行できます。ネットtcpエンドポイントでは、Bだけをバインドする名前付きパイプで、opsAとBの両方を使用できるようにします。

static void CreateService()
{
    var myService = new MyService();
    var serviceHost = new ServiceHost(myService);
    serviceHost.AddServiceEndpoint(typeof(IAllOfMyOps), new NetTcpBinding(), "net.tcp://localhost:61234/MyService/IAllOfMyOps");
    serviceHost.AddServiceEndpoint(typeof(ILimitedAvailabilityOp), new NetNamedPipeBinding(), "net.pipe://localhost/MyService/ILimitedAvailabilityOp");
    serviceHost.Open();
}

接続するクライアントは次のようになります。

class MyClient : ClientBase<IAllOfMyOps>, IAllOfMyOps
{
    public MyClient(Binding binding, EndpointAddress endpoint) : base(binding, endpoint) { }

    public string OpA()
    {
        return base.Channel.OpA();
    }

    public string OpB()
    {
        return base.Channel.OpB();
    }
}

そして、次のように接続します。

static void Connect()
{
    var tcpClient = new MyClient(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:61234/MyService/IAllOfMyOps"));
    Console.WriteLine(tcpClient.OpA());
    Console.WriteLine(tcpClient.OpB());
    tcpClient.Close();

    var namedPipeClient = new MyClient(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyService/ILimitedAvailabilityOp"));
    Console.WriteLine(namedPipeClient.OpB());
    Console.WriteLine(namedPipeClient.OpA()); // this would fail
    namedPipeClient.Close();
}

したがって、コードをどこにも繰り返さず、1つのバインディングで2つの操作を使用でき、別のバインドで1つだけ使用できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネストされたdom要素で複数のバインディングをノックアウトする

分類Dev

ヴァーディン。空のときに選択されたチェックボックスを表示する複数選択グリッド

分類Dev

データバインディング:リスナーからの単一のメソッドを複数のメソッドでバインドします

分類Dev

複数のドメインで複数のディレクトリを使用するFirebaseホスティング

分類Dev

1 つのドキュメントにコーディングされた Web サイトをホストすることはできますか?

分類Dev

iOSデバイスからのメッセージセキュリティモードを持つwsHttpBindingを使用してIISサーバーでホストされているWCFサービスを呼び出す

分類Dev

PXEサーバーで複数のLinuxディストリビューションをホストし、これらの選択肢をPXEクライアントに表示します

分類Dev

jqueryのデータベースから複数選択ドロップダウンバインドの選択されたID値を取得します

分類Dev

マングースの複数のフィールドでソートされたリストでアイテムのランキングを取得する方法

分類Dev

特定のドメインアカウント(IISでホストされている)で実行するようにWCFサービスを偽装する

分類Dev

複数のインスタンスを選択するためのキーボードバインディング

分類Dev

bash:インデックスで選択されたJSON配列のメンバーを反復する

分類Dev

Xamarin.Formsでバインディングを使用して複数選択リストビューのスイッチを有効にするにはどうすればよいですか?

分類Dev

編集ビューでの複数選択値バインディングのMVC5ドロップダウンリスト

分類Dev

サービスアクティベータでオーバーロードされたメソッドを選択します(春の統合)

分類Dev

URLにホスティングサービスの引数を持つコントローラーまたはメソッドが含まれている場合のCodeigniterサーバーエラー

分類Dev

複雑なネストされたSQLアソシエーションを管理可能なサービスに変換するためのフロントエンドデータモデリングのベストプラクティスは何ですか?

分類Dev

bigqueryでヒットスコープのカスタムディメンションを複数選択する

分類Dev

タブが選択されている場合にのみ、アクションバーで選択されたタブのフラグメントアクティビティoncreate()メソッドをロードするにはどうすればよいですか?

分類Dev

タブが選択されている場合にのみ、アクションバーで選択されたタブのフラグメントアクティビティoncreate()メソッドをロードするにはどうすればよいですか?

分類Dev

サブディレクトリを使用して、1つのホスティングで複数のドメインにアクセスする

分類Dev

d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

分類Dev

単一のインターネットドメインの下で、接続されていない複数の個別の複数ページのWebサイトにサービスを提供するための適切なアーキテクチャ?

分類Dev

1つのサーバー/ IPで複数のドメインをホストする

分類Dev

リストビューで複数のソースをバインドする

分類Dev

ハイパースレッディングを備えたクアッドコアホスト、VirtualBoxで構成するプロセッサの数は?

分類Dev

シャーディングされたインデックスの重複ドキュメントをmongoにドロップする方法は?

分類Dev

IISでホストされているWCFサービスはバックグラウンドタスクを実行できますか?

分類Dev

データグリッドビューからリストに文字列型の複数の選択されたセルを保存する

Related 関連記事

  1. 1

    ネストされたdom要素で複数のバインディングをノックアウトする

  2. 2

    ヴァーディン。空のときに選択されたチェックボックスを表示する複数選択グリッド

  3. 3

    データバインディング:リスナーからの単一のメソッドを複数のメソッドでバインドします

  4. 4

    複数のドメインで複数のディレクトリを使用するFirebaseホスティング

  5. 5

    1 つのドキュメントにコーディングされた Web サイトをホストすることはできますか?

  6. 6

    iOSデバイスからのメッセージセキュリティモードを持つwsHttpBindingを使用してIISサーバーでホストされているWCFサービスを呼び出す

  7. 7

    PXEサーバーで複数のLinuxディストリビューションをホストし、これらの選択肢をPXEクライアントに表示します

  8. 8

    jqueryのデータベースから複数選択ドロップダウンバインドの選択されたID値を取得します

  9. 9

    マングースの複数のフィールドでソートされたリストでアイテムのランキングを取得する方法

  10. 10

    特定のドメインアカウント(IISでホストされている)で実行するようにWCFサービスを偽装する

  11. 11

    複数のインスタンスを選択するためのキーボードバインディング

  12. 12

    bash:インデックスで選択されたJSON配列のメンバーを反復する

  13. 13

    Xamarin.Formsでバインディングを使用して複数選択リストビューのスイッチを有効にするにはどうすればよいですか?

  14. 14

    編集ビューでの複数選択値バインディングのMVC5ドロップダウンリスト

  15. 15

    サービスアクティベータでオーバーロードされたメソッドを選択します(春の統合)

  16. 16

    URLにホスティングサービスの引数を持つコントローラーまたはメソッドが含まれている場合のCodeigniterサーバーエラー

  17. 17

    複雑なネストされたSQLアソシエーションを管理可能なサービスに変換するためのフロントエンドデータモデリングのベストプラクティスは何ですか?

  18. 18

    bigqueryでヒットスコープのカスタムディメンションを複数選択する

  19. 19

    タブが選択されている場合にのみ、アクションバーで選択されたタブのフラグメントアクティビティoncreate()メソッドをロードするにはどうすればよいですか?

  20. 20

    タブが選択されている場合にのみ、アクションバーで選択されたタブのフラグメントアクティビティoncreate()メソッドをロードするにはどうすればよいですか?

  21. 21

    サブディレクトリを使用して、1つのホスティングで複数のドメインにアクセスする

  22. 22

    d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

  23. 23

    単一のインターネットドメインの下で、接続されていない複数の個別の複数ページのWebサイトにサービスを提供するための適切なアーキテクチャ?

  24. 24

    1つのサーバー/ IPで複数のドメインをホストする

  25. 25

    リストビューで複数のソースをバインドする

  26. 26

    ハイパースレッディングを備えたクアッドコアホスト、VirtualBoxで構成するプロセッサの数は?

  27. 27

    シャーディングされたインデックスの重複ドキュメントをmongoにドロップする方法は?

  28. 28

    IISでホストされているWCFサービスはバックグラウンドタスクを実行できますか?

  29. 29

    データグリッドビューからリストに文字列型の複数の選択されたセルを保存する

ホットタグ

アーカイブ