我应该使用WCF还是原始套接字?

And*_*ndy 8 c# wcf tcp

我希望在.NET中开发一个客户端 - 服务器应用程序,其功能如下:

  1. 客户端连接到中央服务器.服务器需要跟踪哪些客户端正在连接,并且它必须只允许它知道的那些(我有一个允许客户端的存储库).这是因为在我的应用程序中,知道在给定实例中谁都在场是至关重要的.
  2. 客户端可以通过LAN/USB /串口连接到其他一些设备.服务器应该能够通过客户端控制这些连接的设备.例如,假设客户端连接到摄像头.服务器应该能够在某个特定时间打开相机,然后取回图像(或让客户端执行它并将结果上传到服务器).
  3. 我还希望能够让这些客户端运行自定义可执行文件并获得结果.例如,服务器向客户端发送应用程序(或调用其中的一些现有应用程序),使客户端运行它,并获取结果数据.

我只是想知道我是否可以为此目的使用WCF,或者我应该使用旧的套接字.虽然初始网络很小,但我希望它可以扩展(1000个客户端).任何建议将不胜感激.

tha*_*alm 2

今天,除非你确实需要,否则我永远不会深入到像套接字这样低的水平。使用高级抽象会更加富有成效和创造性。最好花 2-3 天学习 WCF 或 .Net Remoting,然后花 2 周调试低级套接字内容。

几周前我们也做出了类似的决定。我们决定使用远程处理,因为您可以在对象级别上工作,它的设置非常简单并且非常高效。我们本来可以使用 WCF,但设置起来没那么简单。

Remoting 或 WCF 的一大优点是您可以在服务器和客户端之间传递对象并在每一端调用它们的方法。

假设您已经为相机编写了一个抽象,例如:

class Camera
{
    public CompressedImage GetFrame()
    {
        ....
        return image;
    }
}    
Run Code Online (Sandbox Code Playgroud)

然后你可以在服务器上创建一个远程对象并编写如下内容:

var cam = SomeClientObject.GetCamera(); //get proxy object for the cam
....
var frame = cam.GetFrame();
Run Code Online (Sandbox Code Playgroud)

如果图像是可序列化的,它将调用客户端上的方法 GetFrame() 并通过(内部)网络向您传递图像。您唯一需要记住的是,哪些对象在另一端创建代理,以及哪些对象被复制到另一端。

这真的很强大,对我们来说就像一种魅力。因此,请把您的思想从套接字中解放出来:)