本文章设计到使用的代码示例的WebService为服务路径:服务接口:[WebMethod]publicstringHelloWorld(stringStudentName,stringPassWord){returnHelloWorld;}1后台调用Webservice的业务需求在实际开发环境中,我们常常调用WebService时,通过项目中引用现实部署的WebService的Asmx文件,生成客户端代理类的方式。这种方式将和WebService进行了二次封装,并以代理类的方式进行调用,有利用简单,快捷的开发。这种开发方式包含了两个重要的问题1)在开发环境中必须可以访问需要调用的WebService,在开发一些大公司的内网系统时,我们往往在开发环境中访问不到,只仅仅在部署环境中访问。2)WebService的接口发生版本变更,我们的应用系统需要重新编译并部署。在发现以上的困惑后,直觉告诉我们,我们需要一种直接通过交互协议的方式进行访问WebService。就像网页爬虫一样,去交互业务操作。2WebService支持的交互协议WebService支持三种方式1)Httppost方式(注意这种方式只对于本机调试使用,在web服务部署在其他机器上,应用程序不能通过HttpPost方式调用)具体交互格式如下:POST/WebServiceTest/Service1.asmx/HelloWorldHTTP/1.1Host:localhostContent-Type:application/x-=string&PassWord=string2)SOAP1.1协议注意Soap协议是基于HTTP的协议,也就是在HTTP的基础上再次封装交互格式如下:POST/WebServiceTest/Service1.asmxHTTP/1.1Host:localhostContent-Type:text/xml;charset=utf-8Content-Length:lengthSOAPAction:=1.0encoding=utf-8?soap:Envelopexmlns:xsi=:xsd=:soap=:BodyHelloWorldxmlns=:Body/soap:Envelope3)SOAP1.2协议交互格式如下:POST/WebServiceTest/Service1.asmxHTTP/1.1Host:localhostContent-Type:application/soap+xml;charset=utf-8Content-Length:length?xmlversion=1.0encoding=utf-8?soap12:Envelopexmlns:xsi=:xsd=:soap12=:BodyHelloWorldxmlns=:Body/soap12:Envelope3如何配置WebService支持的协议WebService支持的协议包含两种Soap1.1Soap1.2对于webService来讲可以通过配置文件配置,支持那些协议,默认的情况下两种协议都支持。具体的配置方式为:在配置文件中webServicesprotocolsaddname=HttpSoap1.2/addname=HttpSoap1.1//protocols/webServices4后台对WebService的调用4.1SOAP1.1后台调用实例stringstr1=\双引号\;Console.WriteLine(新开始进行连接测试);stringparam=@?xmlversion=1.0encoding=utf-8?soap:Envelopexmlns:xsi=:xsd=:soap=:BodyHelloWorldxmlns=:Body/soap:Envelope;byte[]bs=Encoding.UTF8.GetBytes(param);HttpWebRequestmyRequest=(HttpWebRequest)WebRequest.Create();myRequest.Method=POST;myRequest.ContentType=text/xml;charset=utf-8;myRequest.Headers.Add(SOAPAction,);myRequest.ContentLength=bs.Length;Console.WriteLine(完成准备工作);using(StreamreqStream=myRequest.GetRequestStream()){reqStream.Write(bs,0,bs.Length);}using(HttpWebResponsemyResponse=(HttpWebResponse)myRequest.GetResponse()){StreamReadersr=newStreamReader(myResponse.GetResponseStream(),Encoding.UTF8);responseString=sr.ReadToEnd();Console.WriteLine(反馈结果+responseString);}Console.WriteLine(完成调用接口);}catch(Exceptione){Console.WriteLine(System.DateTime.Now.ToShortTimeString()+LBSEXCEPTION:+e.Message);Console.WriteLine(e.StackTrace);}4.1SOAP1.2后台调用实例Console.WriteLine(新开始进行连接测试);stringresponseString;stringparam=@?xmlversion=1.0encoding=utf-8?soap12:Envelopexmlns:xsi=:xsd=:soap12=:BodyHelloWorldxmlns=:Body/soap12:Envelope;byte[]bs=Encoding.UTF8.GetBytes(param);HttpWebRequestmyRequest=(HttpWebRequest)WebRequest.Create();myRequest.Method=POST;myRequest.ContentType=application/soap+xml;charset=utf-8;myRequest.ContentLength=bs.Length;Console.WriteLine(完成准备工作);using(StreamreqStream=myRequest.GetRequestStream()){reqStream.Write(bs,0,bs.Length);}using(HttpWebResponsemyResponse=(HttpWebResponse)myRequest.GetResponse()){StreamReadersr=newStreamReader(myResponse.GetResponseStream(),Encoding.UTF8);responseString=sr.ReadToEnd();Console.WriteLine(反馈结果+responseString);}Console.WriteLine(完成调用接口);}catch(Exceptione){Console.WriteLine(System.DateTime.Now.ToShortTimeString()+LBSEXCEPTION:+e.Message);Console.WriteLine(e.StackTrace);}注:本文章的开发环境为VSS2008.netFrameWork3.5,本文作者为博客园的“狗尾草”。