WCF';单向';通信实际上是UDP
本文关键字:UDP 实际上 单向 WCF 通信 | 更新日期: 2023-09-27 18:19:55
在本文中(在"Windows Communication Foundation"部分的末尾),作者建议WCF中的单向传输本质上是UDP。这是正确的吗?根据本文的内容,我是否应该假设将我的服务操作标记为"单向"意味着我正在使用UDP?
此外,他建议将UDP与WS-ReliableMessaging结合使用,以消除自己编写传输协议的这些方面的需要。。。好吧,但如果我想在有保证的情况下利用UDP的性能优势,我应该按照本文的建议,只使用"单向"和WS-ReliableMessaging,我就可以使用了!?听起来有点牵强…
那这是怎么回事?这篇文章的建议有哪些注意事项?
WCF单向操作在某种程度上类似于UDP数据报。
如果需要,可以在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(无论出于何种奇怪的环境原因)不可用的情况提供一种替代方案。