7.7.2 手动发送HTTP请求调用Web Service

7.7.2  手动发送HTTP请求调用Web Service

但如果调用Web Service的不是在.NET中,无法直接添加引用怎么办呢?下面就看两个不是直接通过代理类实现对Web Service的调用。(完整代码示例位置:光盘\code\ch07\WinFormsAppClient)

方式一:Get方式的调用

  1. private void button1_Click(object sender, EventArgs e)  
  2. {  
  3.     string strURL = "http://localhost:12074/Service1.asmx/  
  4.             GetProductPrice?ProductId=";  
  5.     strURL += this.textBox1.Text;              
  6.     //创建一个HTTP请求  
  7.     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);  
  8.     //request.Method="get";  
  9.     HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();  
  10. Stream s = response.GetResponseStream();  
  11. //转化为XML,自己进行处理  
  12.     XmlTextReader Reader = new XmlTextReader(s);  
  13.     Reader.MoveToContent();  
  14.     string strValue = Reader.ReadInnerXml();  
  15.     strValue = strValue.Replace("&lt;""<");  
  16.     strValue = strValue.Replace("&gt;"">");  
  17.     MessageBox.Show(strValue);  
  18.     Reader.Close();  

方式二:Post方式的调用

  1. private void button2_Click(object sender, EventArgs e)  
  2. {  
  3.     string strURL = "http://localhost:12074/Service1.asmx/GetProductPrice";  
  4.     //创建一个HTTP请求  
  5.     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);  
  6.     //Post请求方式  
  7.     request.Method = "POST";  
  8.     //内容类型  
  9.     request.ContentType = "application/x-www-form-urlencoded";  
  10.     //设置参数,并进行URL编码  
  11.     string paraUrlCoded = HttpUtility.UrlEncode("ProductId");  
  12.     paraUrlCoded += "=" + HttpUtility.UrlEncode(this.textBox1.Text);  
  13.     byte[] payload;  
  14.     //将URL编码后的字符串转化为字节  
  15.     payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);  
  16.     //设置请求的ContentLength   
  17.     request.ContentLength = payload.Length;  
  18.     //发送请求,获得请求流  
  19.     Stream writer = request.GetRequestStream();  
  20.     //将请求参数写入流  
  21.     writer.Write(payload, 0, payload.Length);  
  22.     //关闭请求流  
  23.     writer.Close();              
  24.     //获得响应流  
  25.     HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  26. Stream s = response.GetResponseStream();  
  27.     //转化为XML,自己进行处理  
  28.     XmlTextReader Reader = new XmlTextReader(s);  
  29.     Reader.MoveToContent();  
  30.     string strValue = Reader.ReadInnerXml();  
  31.     strValue = strValue.Replace("&lt;""<");  
  32.     strValue = strValue.Replace("&gt;"">");  
  33.     MessageBox.Show(strValue);  
  34.     Reader.Close();  

Get请求与Post请求的主要区别在于Post的参数要经过URL编码并在获得请求之前传送,而Get把参数用URL编码后直接附加到请求的URL后面。

URL编码是一种字符编码格式,它确保传递的参数由一致的文本组成(如将空格编码为"%20")。

由于Web Service返回的是标准的XML文档,所以,基本的原理都是通过WebRequest请求后,自己对返回的XML数据进行处理,得到自己想要的信息。同时,这种方式还有一个好处是可以动态调用不同的WebService接口,比较灵活。


posted @ 2012-02-06 14:19  ^_^肥仔John  阅读(802)  评论(0编辑  收藏  举报