WCF';单向';通信实际上是UDP

本文关键字:UDP 实际上 单向 WCF 通信 | 更新日期: 2023-09-27 18:19:55

在本文中(在"Windows Communication Foundation"部分的末尾),作者建议WCF中的单向传输本质上是UDP。这是正确的吗?根据本文的内容,我是否应该假设将我的服务操作标记为"单向"意味着我正在使用UDP?

此外,他建议将UDP与WS-ReliableMessaging结合使用,以消除自己编写传输协议的这些方面的需要。。。好吧,但如果我想在有保证的情况下利用UDP的性能优势,我应该按照本文的建议,只使用"单向"和WS-ReliableMessaging,我就可以使用了!?听起来有点牵强…

那这是怎么回事?这篇文章的建议有哪些注意事项?

WCF';单向';通信实际上是UDP

不,你误解了这篇文章。这篇文章说了两件不同的事情:
  1. WCF单向操作在某种程度上类似于UDP数据报。

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

即使是单向操作也需要确认、重新传输等,以使其可靠。

来自您提到的文章:

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

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

在文章的后面:

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

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

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

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

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

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