winform客户端利用webClient实现与Web服务端的数据传输

由于项目需要,最近研究了下WebClient的数据传输。关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问。无外乎客户端发送请求,服务端处理请求、回应请求。所以,我下面就简单描述下学习过程中遇到的一些问题:

1.关于Winform客户端请求

WebClient wc = new WebClient();//初始化

webclient string path = "http://192.168.1.115:8089/Handler1.ashx";

Uri uri = new Uri(path + "?RequestType=uploaddata");

string str="Requestdata";

wc.UploadStringAsync(uri, str);

关于此处的UploadStringAsync方法,WebClient下有多个方法,UploadStringAsync是异步调用,服务器响应后会有一个回调函数,可以在回调函数里查看服务端返回来的信息。如下

void client_UploadStringCompleted(object o, UploadStringCompletedEventArgs e)

{

   if (e.Error == null)

   {

      if (e.Result == "ok")

         this.DialogResult = DialogResult.OK;

      else

         MessageBox.Show("相应处理", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);

   }

}

但是client_UploadStringCompleted事件提前注册。

2.关于Web服务端处理请求

客户端发出了请求,如果请求的Url没有问题的话,服务端就会收到请求,这里注意到,之前请求的Url中有一个Handler1.ashx(一般处理程序),用来处理客户端发出的请求。这样Web服务端就可以直接在事件处理文件中处理请求信息,不需有前台页面。

public void ProcessRequest(HttpContext context)

{

  if (context.Request["RequestType"] == "uploaddata")

    {

       context.Response.ContentType = "text/plain";

      context.Response.Write("ok");

    }

}

在if中可以对请求进行处理,然后向客户端发出响应的回应。

3.关于报错之“远程服务器返回错误(500):内部服务器错误”

之前在做简单客户端与服务端交互string类型的数据时并没有遇到这个问题,但是后来研究服务器如何向客户端返回datatable或者dataset数据时(一般在程序中都是要用到,程序基本不可能只有string数据交互),发现总是报这个错,查了一上午的资料,也没有解决自己的问题,网上的解决办法有很多种,例如:远程服务器是否更改了文件,远程服务器没有权限诸如此类,总之是服务端的问题,但是服务端的什么问题,由于没有办法测试服务端(因为Web服务端发布了的,这样winform端才能访问),所以一直不知道怎么解决。下午上班时,突然想到是不是自己的代码有问题。就在另一个程序上测试了自己的代码,发现语法上没问题,但是逻辑上有问题。这才终于解决了困扰自己的问题。之后再遇到这样的问题,首先就会去想是否代码问题,若不是,再翻阅相关资料进行查询。

4.关于服务端返回dataset数据

我所做的项目大概是这样的,客户端基本只负责数据显示与数据填写,然后将数据发送给服务端,服务端则负责与数据库的交互,我们都知道,涉及到数据库的交互,就难免会用到datatable,那我们应该怎么样把datatable发给客户端呢?网上查阅资料后,发现,可以将数据转化为byte数组,通过序列化与反序列化实现,大致代码如下

客户端请求

 wc.UploadDataAsync(uri, new byte[] { });//uri见之前的代码

服务器响应并返回数据

DataTable table = sql.GetAircraftInfo();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
DataSet ds = new DataSet();
ds.Tables.Add(table);
bf.Serialize(ms, ds);
byte[] bytes = ms.ToArray();
ms.Close();
context.Response.ContentType = "text/plain";
context.Response.BinaryWrite(bytes);

客户端反序列化数据

void client_UploadDataCompleted(object o, UploadDataCompletedEventArgs e)
{
  if (e.Error == null)
  {
     byte[] bytes = e.Result;
     MemoryStream ms = new MemoryStream(bytes);
     BinaryFormatter bf = new BinaryFormatter();
     ms.Position = 0;
     DataSet ds = bf.Deserialize(ms) as DataSet;
     DataTable table = ds.Tables[0];//得到table数据
 }
}

以上均为自己的拙见,若有不对,敬请批评指正。欢迎交流。(后期应该会继续更新)

转载于:https://www.cnblogs.com/wyynts/p/3797065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VS2017是微软公司开发的一款集成开发环境(IDE),用于开发各种类型的软件应用程序。它提供了一套完整的工具和功能,方便开发人员进行代码编写、调试、测试和部署等工作。 VS2017的优势主要体现在以下几个方面: 首先,VS2017支持多种编程语言,包括C、C++、C#、Python等,使开发人员可以根据项目需求选择最适合的语言进行开发。同时,VS2017还具备强大的代码编辑功能,如智能代码提示、语法检查等,能够帮助开发人员提高代码质量和开发效率。 其次,VS2017提供了丰富的调试工具,能够帮助开发人员快速定位和修复程序中的bug。开发人员可以通过断点调试、查看变量值、单步执行等功能,深入了解程序运行过程,从而加快 bug 的修复进程。 此外,VS2017还支持团队协作开发,提供了代码版本控制工具(如Git)、团队项目管理功能等。开发人员可以方便地与其他团队成员进行代码的共享与合作,提高开发效率和团队协作效果。 最后,VS2017还通过集成了大量的第三方扩展,扩展了其功能和应用范围。开发人员可以根据自己的需要,选择并安装适合自己项目的扩展,满足特定的开发需求。 综上所述,VS2017作为一款强大的集成开发环境,具备多种语言支持、丰富的调试工具、团队协作功能和扩展性等优势,可以帮助开发人员更加高效地进行软件开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值