http调用webservice操作httprequest、httpresponse示例_实用技巧

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将消息反序列化成参数。相对应的客户端代理类也是通过将消息反序列化成对象供客户端使用。

时间: 2024-09-14 20:09:25

http调用webservice操作httprequest、httpresponse示例_实用技巧的相关文章

C# .Net动态调用webService实现思路及代码_实用技巧

复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.IO; using System.Web.Services.Description; using System.CodeDom; using Microsoft.CSharp; using System.CodeDom.Compiler; usi

asp.net操作ini文件示例_实用技巧

复制代码 代码如下: using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls; using Syste

ASP.NET连接MySql数据库的2个方法及示例_实用技巧

方法一: 使用MySQL官方组件使用MySQL推出的 MySQL Connector/Net 组件, 该组件是MySQL为ADO.NET访问MySQL数据库设计的.NET专用访问组件.完成该组件后,需要在项目中引用这个组件,也可以直接在配置文件的< assemblies>节点内添加下面的节点: 复制代码 代码如下: <add assembly="MySql.Data, Version=5.1.5.0, Culture=neutral, PublicKeyToken=C5687F

前台JS(jquery ajax)调用后台方法实现无刷新级联菜单示例_实用技巧

前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 CasMenu.aspx页面: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CasMenu.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr

使用asp.net调用谷歌地图api示例_实用技巧

asp.net调用谷歌地图api,需要注意js引入的先后顺序,复制一下代码即可测试 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title>//在这里要注意js引入的先后顺序 <link href="Mapjs/jquery.ui.base.css" rel="external nofollow" rel="

C#操作Excel数据增删改查示例_实用技巧

C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文件,并添加两张工作表. 工作表1: UserInfo表,字段:UserId.UserName.Age.Address.CreateTime. 工作表2: Order表,字段:OrderNo.ProductName.Quantity.Money.SaleDate. 1.创建ExcelHelper.cs类,Excel文件处理类 复制代码 代码如下: using System; using System.Collections.Gen

DataSet 添加数据集、行、列、主键和外键等操作示例_实用技巧

前台代码:html <%@ Page language="c#" Codebehind="CodeUse.aspx.cs" AutoEventWireup="false" Inherits="DsAndXML.CodeUse" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML>  

在后台cs中调用js中示例_实用技巧

知识点 复制代码 代码如下: ScriptManager.RegisterStartupScript(searchBtn, this.GetType(), "clickPage", "clickPage(" + pageIn.ToString() + ");", true); 其中,searchBtn是当前页面中的随便的标签,this.GetType()是固定的,"clickPage"这个也是随便的,"clickPa

.NET中 关于脏读 不可重复读与幻读的代码示例_实用技巧

并发可能产生的三种问题 脏读 定义:A事务执行过程中B事务读取了A事务的修改,但是A事务并没有结束(提交),A事务后来可能成功也可能失败. 比喻:A修改了源代码并且并没有提交到源代码系统,A直接通过QQ将代码发给了B,A后来取消了修改. 代码示例 复制代码 代码如下: [TestMethod]         public void 脏读_测试()         {             //前置条件             using (var context = new TestEnti