将数据客户端发布到服务器C#的最佳方式

时间:2011-04-10 12:39:48

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

我目前正在使用Windows Form Application开发Windows客户端,从Windows机器收集一些数据。我需要将此数据发送到服务器。但我不知道最好的方法是什么。我目前正在尝试使用WCF Web Service来获取数据并返回true或false。但我需要学习将数据发送到服务器的最快方法。客户必须可靠,快速。我有什么选择或最佳方式。服务器仅将数据发送回true或false。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

ServerCode:

...
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
} 
...

ClientCode:

 ...
   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服务

答案 2 :(得分:1)

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