如何在 WCF 中实现可靠的 UDP 传输?

How to implement a reliable UDP transport in WCF?

我正在寻找有关如何在 WCF 中实现可靠的 UDP 传输的建议和指导。

我需要创建一个客户端和服务器都需要相互提供服务的应用程序,WCF 在我看来是一个很好的选择。我是 WCF 的新手,我只知道非常基础的知识。根据我的阅读,WCF 双工 TCP 通道创建一个从客户端到服务器的 TCP 连接和另一个从服务器到客户端的 TCP 连接用于回调,这对我来说是个问题,因为客户端通常在 firewall/router 后面.我正在考虑使用 UDP 传输来避免这个问题,因为 UDP 是无连接的,但我需要实现可靠的面向连接的 UDP 传输来完成我需要的。

我已经研究了 custom UDP transport samples at MSDN,但我仍然不确切地知道需要什么来实现一个自定义传输,它支持与通常的 TCP 传输基本相同的功能,假设我已经知道如何实现 UDP 的可靠性。


作为使用内置 TCP 传输完成我需要的功能的可能替代方法,我已经阅读了有关长轮询的内容,但这似乎违反直觉,并且似乎给整个事情增加了不必要的复杂性。不过,我愿意听取有关 UDP 方法替代方案的建议。

你的想法很好,而UDP协议本身就不可靠。所以WCF双工通道都是基于TCP协议的。如文章所述,

For the UDP transport, the only MEP that is supported is Datagram, because UDP is inherently a "fire and forget" protocol.

据我了解,如果要保证UDP通信的可靠性,应用层协议应该完成Confirmation和超时重传机制。这意味着我们应该考虑在应用层实现可靠的 UDP 传输(至少还没有正式实现)。
https://www.codeproject.com/Articles/331599/What-s-new-in-WCF-4-5-UDP-transport-support
https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/service-channel-listeners-and-channels