用什么?WCF还是套接字?在c#程序中

本文关键字:程序 套接字 什么 WCF | 更新日期: 2023-09-27 18:14:00

我需要创建一个c#程序,该程序将在我们本地的Windows客户端机器上运行。这些"客户端"程序必须接受在另一台机器上运行的"管理"程序的命令。这些命令可以是重新启动客户端计算机,将一些关于IP地址等的本地信息返回给'admin'程序。

但是如何做到这一点呢?我知道一点关于WCF,但这是正确的方式去吗?如果我使用WCF,那么我将不得不让客户机程序运行一个服务方法,比如每秒一次,以检查新命令。用套接字,我建立一个"直接"连接,客户端只是等待命令接收-不是正确的理解?

哪条路对我来说是正确的?

我们正在讨论约10个客户端,我希望最大延迟(发送命令-接收信息)为1秒。

任何提示也将不胜感激。

用什么?WCF还是套接字?在c#程序中

双工WCF服务器。基本上,所有客户机都连接到服务器(因此只有1台服务器),并且服务器在需要时使用其双工通道回调客户机。没有轮询,可伸缩性好等等。您需要处理的最头痛的问题是设置一个很长的超时,以防您有一段时间没有发送任何东西,从而导致通道超时。

WCF最终会变得简单得多。

几个链接:

http://msdn.microsoft.com/en-us/library/ms731064.aspx

http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF

您可以使WCF客户端充当服务器,并使用命令&控制程序连接到它们是没有问题的。如果你不想用套接字带来的丑陋的东西,那就使用WCF吧。WCF可以在app.config中很好地配置,即使不需要IIS服务器,您也可以使它成为真正的自托管命令行应用程序。然后配置将是可重用的,更容易维护。

你可以使用。net Remoting,它可以提供从服务器到客户端的"push"反向通道(使用"callback ")。它不需要另一个方向的第二个TCP连接,所以你不需要扰乱客户端的防火墙和路由器。

远程操作被认为是过时的,但它有它的地方。

在任何情况下我都不会使用WCF轮询技术。这会导致服务器出现严重的延迟和DDOS情况。

如果你能让客户端打开一个端口,那么托管一个WCF服务可能是最好的主意。

我建议使用套接字实现,因为从长远来看,它可能会给您带来更大的灵活性。您可以使用套接字名称空间从头开始创建它。作为一种替代方案,您可以使用现成的网络库解决方案。查看lidgren和NetworkComms.Net

免责声明:我是NetworkComms.Net的开发人员。

对于您提到的少量机器和适度的性能要求,我认为WCF最终会比套接字更容易。

您可以查看Duplex WCF。我从来没有使用过它,而且在过去任何我需要任何不寻常的东西时,WCF都让我头疼,但它是针对您正在谈论的那种问题的。

如果所有的机器都在一个网络上,这里有一个创造性的替代方案,灵感来自消息队列:您可以使用数据库表作为消息出现的地方,并在客户端空闲时读取消息。客户端可以只是查询它,并说:让我所有的消息,其中MessageID> LastReceivedMessageID。

最后一种方法的缺点是:(a)你仍然在做轮询,尽管你的数据库服务器应该能够处理它;(b)如果你可能在你的网络之外需要这个,你将需要一个VPN或一个新的解决方案。

你可以使用MSMQ…实现

再简单不过了

http://msdn.microsoft.com/en-us/library/windows/desktop/ms711472 (v = vs.85) . aspx

我在许多类似的应用程序中使用MSMQ。完美的工作。