WCF路由器:单向和请求 - 回复操作

时间:2012-06-06 09:16:48

标签: .net wcf router

为了准备我的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)

  • 即可。更改第03行如下

      

    的typeof((IDuplexSessionRouter)

  • C 即可。更改第10行如下

      

    的typeof((IRequestReplyRouter)

  • d 即可。更改第10行如下

      

    的typeof((IDuplexSessionRouter)

他们说正确答案是 B ,但我无法理解(我需要理解:))。我会回答 A ,因为没有回调方法,我们不需要DuplexSessionRouter,不是吗?然后一个IRequestReply就足够了吗?

我错过了什么?

1 个答案:

答案 0 :(得分:5)

路由服务使用定义用于接收和发送消息的通道形状的合同,因此输入通道的形状必须与输出通道的形状匹配。

因此,如果您执行路由到使用请求 - 回复通道形状的端点,则必须在入站端点上使用兼容的合同,例如IRequestReplyRouter。

这意味着如果目标端点使用具有多种通信模式的合同(例如混合单向和双向操作),则无法创建可以接收消息并将消息路由到所有这些端点的单个服务端点。解决方法是在路由服务中使用双工合同,例如IDuplexSessionRouter。

参考文献:

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

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