1

本文中,(在“Windows 通信基础”部分的最后)作者建议 WCF 中的单向传输本质上是 UDP。它是否正确?我是否应该根据本文的内容假设将我的服务操作标记为“单向”意味着我正在使用 UDP?

此外,他建议将 UDP 与 WS-ReliableMessaging 结合使用,以消除自己编写传输协议的这些方面的需要......好吧,但如果我想在需要的情况下利用 UDP 的性能优势,我应该,根据本文的建议,只需使用“一种方式”和 WS-ReliableMessaging 就可以了!?对我来说听起来有点牵强...

那么这里有什么问题呢?这篇文章的建议有哪些注意事项?

4

4 回答 4

2

不,你误解了这篇文章。这篇文章说了两件事:

  1. WCF 单向操作有点类似于 UDP 数据报。

  2. 如果需要,可以在 UDP 之上实现 WS-ReliableMessaging。

甚至一种方式的操作也需要确认、重传等以使其可靠。

于 2012-01-09T23:02:01.050 回答
1

从你提到的文章中:

WCF 公开了多个网络协议(最显着的是 TCP),并且可以通过编写 WCF 传输通道扩展到其他网络协议。WCF 通过其可扩展性模型支持 UDP,基本 UDP 通道的代码将作为 WinFX® SDK 中的代码示例提供。

他们在他们的设置中使用 UDP 传输,所以在他们的情况下,是的。如果您有使用基于 TCP 的传输的服务,那么一种通信方式将不是 UDP。

在文章的后面:

基于WCF的UDP实现是一种单向通道

所以他们实际上只是在谈论 WCF 中的 UDP 是如何实现的,而不是一般的 WCF。

于 2012-01-09T22:59:36.517 回答
1

WS-ReliableMessaging 依赖于接收方将确认('acks')发送回发送方。否则发送者将无法知道消息是否需要重新发送。在 TCP 中,这是内置在传输协议中的(这是 TCP 和 UDP 之间的区别之一)。

在 UDP 中,您放弃了 TCP 的“开销”,但是如果您需要可靠的消息传递,您的服务器仍然会向客户端发送一些内容。

于 2012-01-09T23:00:00.320 回答
1

实际上,如果您更仔细地阅读文章的该部分,您会发现它不仅仅是使用单向消息传递和 WS-ReliableMessaging。您还必须添加一个 UDP 绑定元素(例如bindingElements.Add(new UdpTransportBindingElement());)和其他类似的东西。如果你不添加这些东西,你仍然会使用 TCP。

作为附加说明,我怀疑您需要沉迷于一些非常复杂的基准测试,然后才能得出结论,UDP 实际上将比 TCP 具有更高的 Web 服务性能。我自己还没有做过这些测试,但我怀疑当你的soap.udp://绑定完成时,将所有可靠的消息传递位和其他东西添加到你的服务中,你将拥有与 TCP 几乎相同的开销。我怀疑 UDP 可用作传输绑定的原因不是因为任何卓越的性能特征,而是为 TCP(出于任何奇怪的环境原因)不可用的场景的极端情况提供替代方案。

于 2012-01-09T23:00:28.843 回答