WebService的调用

  今天测试用代码如何去调用WebService,因为之前都是直接vs直接引用,网上搜索的很多也并没有讲清楚,搞得一直不得劲。其实基元对象(string/int等)的调用倒是挺简单的,根据方法名赋值传参就可以了,一直搞不定的是自定义对象的访问。最后终于发现还是要仔细看WebService的方法描述说明呀。

  先定义一个WebService方法:

发布后,打开WebService地址,我们点击查看方法的描述

可以看到一共有三种访问方法的方式:soap1.1,soap1.2,http post

 灰色的描述其实已经告诉我们访问的方式。包括content-type,headers需要的参数等。我今天一直困在http post传复杂对象的问题上,后来查看对应的方法描述后才发现传递复杂对象是没有http post的访问方式的。对于所有的WebService方法,都可以用soap的方式进行访问,我们需要做的只是了解xml的格式然后传过去就可以了。

  以下代码描述如何通过代码访问WebService,报文xml内容请参照灰色部分方法描述:

 1             var xml = "your xml";
 2             var bytes = Encoding.UTF8.GetBytes(xml);
 3             var url = "your url";//注意,是webservice入口,不是方法入口,如:http://localhost:19546/WebService.asmx
 4             var request = (HttpWebRequest)WebRequest.Create(url);
 5             request.Method = "POST";
 6             request.ContentType = "text/xml; charset=utf-8";//参照方法描述给
 7             request.Accept = "text/html,application/xhtml+xml,application/xml";
 8             //request.Headers.Add("SOAPAction", url);//根据描述判断是否需要加上
 9             request.ContentLength = bytes.Length;
10             var reqStream = request.GetRequestStream();
11             reqStream.Write(bytes, 0, bytes.Length);
12             reqStream.Close();
13             var rep = request.GetResponse();
14             var stream = rep.GetResponseStream();
15             System.IO.StreamReader sr = new System.IO.StreamReader(stream);
16             var ret = sr.ReadToEnd(); //ret 返回值也是xml格式,可以自行序列话成对象
原文地址:https://www.cnblogs.com/jidanfan/p/6679092.html