【问题标题】:Best way to post data client to server C#将数据客户端发布到服务器 C# 的最佳方式
【发布时间】:2011-04-10 12:39:48
【问题描述】:

我目前正在开发 Windows 客户端,使用 Windows 窗体应用程序从 Windows 机器收集一些数据。我需要将此数据发送到服务器。但我不知道最好的方法是什么。我目前正在尝试通过 WCF Web 服务获取数据并返回 true 或 false。但我需要学习将数据发送到服务器的最快方法。客户端必须可靠且快速。我有什么选择或最好的方法来做到这一点。服务器只发回数据为真或假。

【问题讨论】:

    标签: c# .net winforms web-services client-server


    【解决方案1】:

    如果我有这样的任务,我也会使用 WCF 网络服务。

    我要做的唯一一个区别是:键入 void 并在出现错误时抛出异常。

    【讨论】:

      【解决方案2】:

      我会看看RhinoServiceBus。它快速且相当容易实现。如果您不喜欢这样,那么我也会使用 WCF。

      【讨论】:

      • 我认为 RhinoServiceBus 需要 MSMQ 而我无法使用 msi 安装程序安装 MSMQ >。你知道这样做的正确方法还是运行 RhinoServiceBus 在没有 MSMQ 的情况下运行
      【解决方案3】:

      您可以使用基于 Socket 的低级网络传输协议,如 TCP 或 UDP,但您必须自己管理转换和序列化。

      在 C# 中,您将使用 TcpClient 和 TcpListener 类,并使用某种序列化程序(本例中为 BinaryFormatter)序列化您的对象

      服务器代码:

      ...
      TcpListener listener = new TcpListener(8080);
      listener.Start();
      using  (TcpClient client = listener.AcceptTcpClient())
      {
          BinaryFormatter formatter = new BinaryFormatter();
          //Assuming the client is sending an integer
          int arg = (int)formatter.Deserialize(client.GetStream());
          ... //Do something with arg
          formatter.Serialize(result); //result is your boolean answer
      } 
      ...
      

      客户代码:

       ...
         using (TcpClient client = new TcpClient(ipaddress, 8080) //ipaddress is the ip address of the server
        {
         BinaryFormatter formatter = new BinaryFormatter();
         formatter.Serialize(client.GetStream(), 12) //12 is an example for the integer
         bool result = formatter.Deserialize(client.GetStream());
         ... //do something with result
        }
         ...
      

      但正如您所见,最快的(UDP 可能更快,但不能保证发送数据)方式并不是最简单的(而且并不总是最好的)。

      所以对于 Windows 窗体项目,我会使用某种“现成的”RMI/RPC API,例如 WCF 或 ASP.Net Web 服务

      【讨论】:

      • 我必须知道数据已发送并且特定工作已完成。我不想丢失任何数据。
      • UDP 不保证交付。 TCP 添加了该功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2018-01-11
      • 2014-05-16
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多