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

时间:2019-03-19 21:26:34

标签: c# .net sockets wcf udp

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

我需要创建一个客户端和服务器都需要相互提供服务的应用程序,而WCF在我看来是一个非常好的选择。我是WCF的新手,但我仅了解一些基础知识。根据我的阅读,WCF双工TCP通道在客户端到服务器之间创建了一个TCP连接,在服务器到客户端之间创建了一个用于回调的TCP连接,这对我来说是个问题,因为客户端通常位于防火墙/路由器后面。我正在考虑使用UDP传输来避免该问题,因为UDP是无连接的,但是我需要实现一个可靠的面向连接的UDP传输来完成我所需要的。

我已经研究了custom UDP transport samples at MSDN,但是我仍然不确切知道实现自定义传输所需要的内容,该传输将支持与常规TCP传输基本相同的功能,假设我已经知道如何实现UDP的可靠性。


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

1 个答案:

答案 0 :(得分:1)

您的想法很棒,而UDP协议本身并不可靠。因此WCF双工通道是基于TCP协议的。如文章所述,

  

对于UDP传输,唯一支持的MEP是数据报,   因为UDP本质上是“即发即弃”协议。

据我所知,如果我们要确保UDP通信的可靠性,则应该在应用程序层协议中完成确认和超时重传机制。这意味着我们应该考虑在应用层实现可靠的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