在this文章中,(在“Windows Communication Foundation”部分的末尾),作者建议WCF中的单向传输本质上是UDP。它是否正确?我是否应该假设基于本文的内容将我的服务标记为“单向”意味着我正在使用UDP?
此外,他建议将UDP与WS-ReliableMessaging结合使用,以消除自己编写传输协议的这些方面的需要......好吧,但是如果我想在保证它的情况下利用UDP的性能优势我应该按照这篇文章的建议,使用'单向'和WS-ReliableMessaging,我很高兴去!听起来有点牵不到......
那么这里的交易是什么?本文的建议有哪些注意事项?
答案 0 :(得分:2)
不,你误解了这篇文章。这篇文章说了两件不同的事情:
WCF单向操作有点类似于UDP数据报。
如果需要,可以在UDP之上实现WS-ReliableMessaging。
即使是单向操作也需要确认,重传等,以使其可靠。
答案 1 :(得分:1)
从您提到的文章:
WCF公开了多种网络协议(最值得注意的是TCP) 通过编写WCF传输可扩展到其他网络协议 渠道。 WCF通过其可扩展性模型支持UDP 基本UDP通道的代码将作为代码示例提供 WinFX®SDK。
他们在设置中使用UDP传输,所以在他们的情况下,是的。如果您有使用基于TCP的传输的服务,那么单向通信将不是UDP。
在文章中进一步说明:
基于WCF的UDP实现是单向通道
所以他们实际上只讨论如何实现WCF中的UDP,而不是WCF。
答案 2 :(得分:1)
WS-ReliableMessaging依赖于接收方将确认('acks')发送回发送方。否则,发件人无法知道该消息是否需要重新发送。在TCP中,这是内置于传输协议(这是TCP和UDP之间的差异之一)。
在UDP中,您正在放弃TCP的“开销”,但如果您需要可靠的消息,您的服务器仍然会向客户端发回一些内容。
答案 3 :(得分:1)
实际上,如果您更仔细地阅读本文的这一部分,您会发现除了使用单向消息传递和WS-ReliableMessaging之外,还有更多内容。您还必须添加UDP绑定元素(.e.g,bindingElements.Add(new UdpTransportBindingElement());
)和其他类似的东西。如果你不添加这些东西,你仍然会使用TCP。
作为补充说明,我怀疑你需要沉迷于一些非常复杂的基准测试,然后你才能得出结论,UDP实际上会比TCP服务具有更高的性能。我自己没有做过这些测试,但我怀疑是当你的soap.udp://
绑定完成时添加所有可靠的消息传递位以及什么不是你的服务,你将拥有几乎所有的与TCP相同的开销。我怀疑UDP可用作传输绑定的原因并不是因为任何优越的性能特征,而是为TCP(因为任何奇怪的环境原因)不可用的情况提供替代方案。