WebService 中操作 HttpRequest / HttpResponse (一)

本文介绍了一种使用WebService通过HttpRequest发送和接收XML数据的方法。客户端创建包含数据的DataTable,并将其序列化为XML,然后通过POST请求发送给服务端。服务端读取请求中的XML数据并解析为DataTable,再将处理结果(如行数)以JSON格式返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REST WCF 使得我们调用Web服务时,可以通过HttpRequest的交互简单完成。那么老版的WebService能否做到呢?WebService中通过HttpContext.Current.Rquest/Response,我们一样也可以改造WebMethod。

客户端: (详见注释)
// 创建一个DataTable DataTable data = new DataTable("Project"); data.Columns.Add("Name"); data.Columns.Add("Birthday"); data.Rows.Add(new object[] { "Wendy", "1978/03/11" }); data.Rows.Add(new object[] { "Philip", "2000/11/05" }); data.Rows.Add(new object[] { "Felix", "1999/08/04" }); using (var ms = new MemoryStream()) { // 将DataTable用Xml格式写入流 data.WriteXml(ms, XmlWriteMode.WriteSchema); var client = new WebClient(); // 定义HttpRequest的Content-Type(xml,json等) client.Headers.Add("Content-Type", "text/xml"); var url = "http://localhost:2609/Service1.asmx/SendXml"; // Send HttpRequest var resp = client.UploadData(url, "POST", ms.ToArray()); var strResp = System.Text.Encoding.UTF8.GetString(resp); MessageBox.Show(strResp); }

服务端:
[WebMethod] public void SendXml() { // 获得客户端RAW HttpRequest var inputStream = HttpContext.Current.Request.InputStream; // 定义Response返回的格式是:Json var response = HttpContext.Current.Response; response.ContentType = "text/json"; //var strXml = ""; //using (var sr = new StreamReader(inputStream)) // strXml = sr.ReadToEnd(); try { DataTable data = new DataTable(); using (var xr = XmlReader.Create(inputStream)) data.ReadXml(xr); // 将读入Xml的DataTable的行数返回客户端 string count = "/"" + data.Rows.Count + "/""; response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(count)); } catch (Exception ex) { response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(ex.Message)); } }

客户端输出""3""

PS: 如果客户端的HttpRequest满足SOAP序列化格式,WebService会为WebMethod将消息反序列化成参数。相对应的客户端代理类也是通过将消息反序列化成对象供客户端使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值