1

70-513試験を準備するために、次の質問を見つけました。

Windows Communication Foundation(WCF)サービスは、一方向および要求と応答の操作を伴うコントラクトを実装します。サービスはTCPトランスポートを介して公開されます。クライアントはルーターを使用してサービスと通信します。ルーターは次のように実装されています。(行番号は参照用にのみ含まれています。)

01 ServiceHost host = new ServiceHost(typeof(RoutingService));
02 host.AddServiceEndpoint (
03     typeof(ISimplexDatagramRouter),
04     new NetTcpBinding(), "net.tcp://localhost/Router"
05    );
06 List<ServiceEndpoint> lep = new List<ServiceEndpoint>();
07 lep.Add (
08     new ServiceEndpoint (
09         ContractDescription.GetContract(
10             typeof(ISimplexDatagramRouter)
11    ),
12     new NetTcpBinding(),
13     new EndpointAddress("net.tcp://localhost:8080/Logger")
14    )
15 );
16 RoutingConfiguration rc = new RoutingConfiguration();
17 rc.FilterTable.Add(new MatchAllMessageFilter(), lep);
18 host.Description.Behaviors.Add(new RoutingBehavior(rc));

要求/応答操作が失敗しています。ルータが一方向および要求/応答操作を処理できることを確認する必要があります。あなたは何をするべきか?

  • A。 _ 行03を次のように変更します

    typeof((IRequestReplyRouter)

  • B。 _ 行03を次のように変更します

    typeof((IDuplexSessionRouter)

  • C。 _ 10行目を次のように変更します

    typeof((IRequestReplyRouter)

  • D。 _ 10行目を次のように変更します

    typeof((IDuplexSessionRouter)

彼らは正解はBだと言っていますが、私には理解できません(そして私は理解する必要があります:))。コールバックメソッドがないので、応答Aに答えたでしょう、DuplexSessionRouterを持っている必要はありませんか?そして、IRequestReplyで十分ですか?

私は何が欠けていますか?

4

1 に答える 1

5

ルーティングサービスは、メッセージの送受信に使用されるチャネルの形状を定義するコントラクトを使用するため、入力チャネルの形状は出力チャネルの形状と一致する必要があります。

したがって、要求/応答チャネルシェイプを使用するエンドポイントへのルーティングを実行する場合は、IRequestReplyRouterなどのインバウンドエンドポイントで互換性のあるコントラクトを使用する必要があります。

つまり、宛先エンドポイントが複数の通信パターンを持つコントラクトを使用している場合(一方向操作と双方向操作の混合など)、メッセージを受信して​​それらすべてにルーティングできる単一のサービスエンドポイントを作成することはできません。回避策は、IDuplexSessionRouterなどのルーティングサービスでデュプレックスコントラクトを使用することです。

参照:

http://msdn.microsoft.com/en-us/magazine/cc546553.aspx

http://msdn.microsoft.com/en-us/library/ee517422.aspx

于 2012-06-07T00:44:43.657 に答える