为了实现一个使用多播向网络中的其他进程发送小的周期性消息的网络应用程序,对于在 .Net 框架中使用 API,我有哪些选择?除了我当前明显的选择 System.net.sockets API 之外,WCF 是否提供了一种更简单的方法?还是 WCF 纯粹是一种基于 SOA 的点对点 IPC 机制?
注意:我非常熟悉多播编程的实现细节。我感兴趣的是 .Net 框架提供的其他选择。
I was going to suggest that use callback channels (i.e. a pub/sub type system) implemented in WCF, but that would require your clients to register with the 'server'.
I was then going to mention enterprise class messaging solutions like Tibco EMS (a JMS implementation).
Then I hit google and found this link: WCF Multicasting. There are lots of ideas on there which I've not yet come across in my own inital look at WCF.
您只需创建一个UDPClient
并将数据发送到一个多播地址(224/4
,即来自224.0.0.0
to的任何地址239.255.255.255
)。
您的客户只需照常收听此地址即可。
PS 虽然WCF
对于这样一个简单的任务来说有点过头了,但使用WCF
. 那里有不同Message Exchange Patterns
的地方,即通信流动的方式。
您需要的是IOutputChannel
发送者和IInputChannel
侦听器,这些都是面向数据报的模式。
FWIW,您最初的问题是专门询问 WCF 是否可以实现您的目标。正如 Quassnoi 之前指出的,您当然可以使用 WCF 执行此操作。虽然大多数关于 WCF 的文献都集中在您如何使用它的合同模型上,但仅使用通道模型和绑定结构是可能且合理的。
如果您实现 IOutputChannel 和 IInputChannel,您可以创建自己的基于数据报的通道。这是作为框架的一部分提供的吗(我认为这也是您问题的核心)。但是,Microsoft 确实提供了一个 UDP 传输示例(他们声称支持多播)。您可以在以下 URL 找到他们的示例:
WCF 对于你想做的事情来说真的很重。
您最好的选择确实是在套接字 api 中使用数据报。一旦你了解了 API,它们就不会太可怕,但它肯定不是最友好的。
如果您的 ISP / 网络管理员允许多播数据,则多播是通过发送到的地址实现的。WCF本质上不允许多个目标AFAIK,当您创建代理时,您必须将其指向一个IP(可能是多播地址)