【发布时间】:2009-02-05 11:51:33
【问题描述】:
为了实现一个使用多播向网络中的其他进程发送小的周期性消息的网络应用程序,对于在 .Net 框架中使用 API,我有哪些选择?除了我当前明显的选择 System.net.sockets API 之外,WCF 是否提供了一种更简单的方法?还是 WCF 纯粹是一种基于 SOA 的点对点 IPC 机制?
注意:我非常熟悉多播编程的实现细节。我感兴趣的是 .Net 框架提供的其他选择。
【问题讨论】:
为了实现一个使用多播向网络中的其他进程发送小的周期性消息的网络应用程序,对于在 .Net 框架中使用 API,我有哪些选择?除了我当前明显的选择 System.net.sockets API 之外,WCF 是否提供了一种更简单的方法?还是 WCF 纯粹是一种基于 SOA 的点对点 IPC 机制?
注意:我非常熟悉多播编程的实现细节。我感兴趣的是 .Net 框架提供的其他选择。
【问题讨论】:
我打算建议使用 WCF 中实现的回调通道(即发布/订阅类型系统),但这需要您的客户端向“服务器”注册。
然后我将提到企业级消息传递解决方案,例如 Tibco EMS(一种 JMS 实现)。
然后我点击谷歌并找到了这个链接:WCF Multicasting。那里有很多我在最初看 WCF 时还没有遇到过的想法。
【讨论】:
您只需创建一个UDPClient 并将数据发送到一个多播地址(224/4,即从224.0.0.0 到239.255.255.255 的任何地址)。
您的客户只是照常收听此地址。
查看我的回答here了解更多详情。
附:尽管WCF 对于这样一个简单的任务来说是相当大的杀伤力,但使用WCF 完全有可能。那里有不同的Message Exchange Patterns,我。 e.沟通的方式。
您需要的是发送者的IOutputChannel 和侦听器的IInputChannel,这些都是面向数据报的模式。
【讨论】:
WCF 对于你想做的事情来说真的很重。
您最好的选择确实是在套接字 api 中使用数据报。一旦您了解了 API,它们就不会太可怕了,但它肯定不是最友好的。
如果您的 ISP/网络管理员允许多播数据,则多播是通过发送到的地址实现的。 WCF 本质上不允许多个目标 AFAIK,当您创建代理时,您必须将其指向一个 IP(可能是多播地址)
【讨论】:
FWIW,您最初的问题是专门询问 WCF 是否可以实现您的目标。正如 Quassnoi 之前指出的,您当然可以使用 WCF 执行此操作。虽然大多数关于 WCF 的文献都集中在您如何使用它的合同模型上,但仅使用通道模型和绑定结构是可能且合理的。
如果您实现 IOutputChannel 和 IInputChannel,您可以创建自己的基于数据报的通道。这是作为框架的一部分提供的吗(我认为这也是您问题的核心)。但是,Microsoft 确实提供了一个 UDP 传输示例(他们声称支持多播)。您可以在以下 URL 找到他们的示例:
【讨论】: