由于项目需要,最近研究了下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端才能访问),所以一直不知道怎么解决。下午上班时,突然想到是不是自己的代码有问题。就在另一个程序上测试了自己的代码,发现语法上没问题,但是逻辑上有问题。这才终于解决了困扰自己的问题。之后再遇到这样的问题,首先就会去想是否代码问题,若不是,再翻阅相关资料进行查询。
以上均为自己的拙见,若有不对,敬请批评指正。欢迎交流。(后期应该会继续更新)
winform客户端利用webClient实现与Web服务端的数据传输