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));

请求-回复操作失败。您需要确保路由器可以处理单向和请求-回复操作。你该怎么办?

  • 一个。将第 03 行更改如下

    typeof((IRequestReplyRouter)

  • 。将第 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 回答