zoukankan      html  css  js  c++  java
  • 通过HttpWebRequest在后台对WebService进行调用 【转】

    通过HttpWebRequest在后台对WebService进行调用

     

    目录:

    1  后台调用Webservice的业务需求

    2  WebService支持的交互协议

    如何配置WebService支持的协议

    后台对WebService的调用

    4.1 SOAP 1.1 后台调用实例

    4.2 SOAP 1.2 后台调用实例

     

    注:本文章的开发环境为VSS2008  .net FrameWork 3.5

     

    本文章设计到使用的代码示例的WebService

    服务路径:http://localhost/WebServiceTest/Service1.asmx

    服务接口:

    [WebMethod]

            public string HelloWorld(string StudentName,string PassWord)

            {

                return "Hello World";

            }

     

    1  后台调用Webservice的业务需求

       在实际开发环境中,我们常常调用WebService时,通过项目中引用现实部署的WebServiceAsmx文件,生成客户端代理类的方式。这种方式将和WebService进行了二次封装,并以代理类的方式进行调用,有利用简单,快捷的开发。

    这种开发方式包含了两个重要的问题

    1)在开发环境中必须可以访问需要调用的WebService,在开发一些大公司的内网系统时,我们往往在开发环境中访问不到,只仅仅在部署环境中访问。

    2WebService的接口发生版本变更,我们的应用系统需要重新编译并部署。

       

    在发现以上的困惑后,直觉告诉我们,我们需要一种直接通过交互协议的方式进行访问WebService。就像网页爬虫一样,去交互业务操作。

     

     

    2  WebService支持的交互协议

     

    WebService支持三种方式

    1Http post 方式(注意这种方式只对于本机调试使用,在web服务部署在其他机器上,应用程序不能通过 Http Post方式调用)

           具体交互格式如下:

    POST /WebServiceTest/Service1.asmx/HelloWorld HTTP/1.1

    Host: localhost

    Content-Type: application/x-www-form-urlencoded

    Content-Length: length

     

    StudentName=string&PassWord=string

     

    2SOAP1.1协议 注意Soap协议是基于HTTP的协议,也就是在HTTP的基础上再次封装

    交互格式如下:

    POST /WebServiceTest/Service1.asmx HTTP/1.1

    Host: localhost

    Content-Type: text/xml; charset=utf-8

    Content-Length: length

    SOAPAction: "http://tempuri.org/HelloWorld"

     

    <?xml version="1.0" encoding="utf-8"?>

    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Body>

        <HelloWorld xmlns="http://tempuri.org/">

          <StudentName>string</StudentName>

          <PassWord>string</PassWord>

        </HelloWorld>

      </soap:Body>

    </soap:Envelope>

     

    3SOAP1.2 协议

    交互格式如下:

    POST /WebServiceTest/Service1.asmx HTTP/1.1

    Host: localhost

    Content-Type: application/soap+xml; charset=utf-8

    Content-Length: length

     

    <?xml version="1.0" encoding="utf-8"?>

    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">

      <soap12:Body>

        <HelloWorld xmlns="http://tempuri.org/">

          <StudentName>string</StudentName>

          <PassWord>string</PassWord>

        </HelloWorld>

      </soap12:Body>

    </soap12:Envelope>

     

    如何配置WebService支持的协议

    WebService支持的协议包含两种 Soap1.1 Soap1.2 对于webService 来讲可以通过配置文件配置,支持那些协议,默认的情况下两种协议都支持。

    具体的配置方式为:

    在配置文件中

    <webServices>

      <protocols>

        <add name="HttpSoap1.2"/>

        <add name="HttpSoap1.1"/>

    </protocols>

    </webServices>

     

     

    后台对WebService的调用

    4.1 SOAP 1.1 后台调用实例

                      string   str1="\"双引号\"";  

                    Console.WriteLine("新开始进行连接测试");

     

                    string param = @"<?xml version=""1.0"" encoding=""utf-8""?>

                                            <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">

                                              <soap:Body>

                                                <HelloWorld xmlns=""http://tempuri.org/"">

                                                  <StudentName>1</StudentName>

                                                  <PassWord>1</PassWord>

                                                </HelloWorld>

                                              </soap:Body>

                                            </soap:Envelope>";

                    byte[] bs = Encoding.UTF8.GetBytes(param);

                    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://fox-gaolijun/Short_Message/Service1.asmx");

     

                    myRequest.Method = "POST";

                    myRequest.ContentType = "text/xml; charset=utf-8";

                    myRequest.Headers.Add("SOAPAction", "http://tempuri.org/HelloWorld");

                    myRequest.ContentLength = bs.Length;

     

                    Console.WriteLine("完成准备工作");

                    using (Stream reqStream = myRequest.GetRequestStream())

                    {

                        reqStream.Write(bs, 0, bs.Length);

                    }

                   

                    using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())

                    {

                        StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

                        responseString = sr.ReadToEnd();

                        Console.WriteLine("反馈结果" + responseString);

                    }  

                    Console.WriteLine("完成调用接口");

     

                }

                catch (Exception e)

                {

                    Console.WriteLine(System.DateTime.Now.ToShortTimeString() + "LBS EXCEPTION:" + e.Message);

     

                    Console.WriteLine(e.StackTrace);

                }

     

    4.1 SOAP 1.2 后台调用实例

    Console.WriteLine("新开始进行连接测试");

                    string responseString;

                    string param = @"<?xml version=""1.0"" encoding=""utf-8""?>

                                    <soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">

                                     <soap12:Body>

                                        <HelloWorld xmlns=""http://tempuri.org/"">

                                            <StudentName>1212</StudentName>

                                             <PassWord>12121</PassWord>

                                        </HelloWorld>

                                    </soap12:Body>

                                </soap12:Envelope>";

                    byte[] bs = Encoding.UTF8.GetBytes(param);

                    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("  http://fox-gaolijun/Short_Message/Service1.asmx");

     

                    myRequest.Method = "POST";

                    myRequest.ContentType = "application/soap+xml; charset=utf-8";

                    myRequest.ContentLength = bs.Length;

                

                    Console.WriteLine("完成准备工作");

                    using (Stream reqStream = myRequest.GetRequestStream())

                    {

                        reqStream.Write(bs, 0, bs.Length);

                    }

     

                    using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())

                    {

                        StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

                        responseString = sr.ReadToEnd();

                        Console.WriteLine("反馈结果" + responseString);

                    }

                    Console.WriteLine("完成调用接口");

     

                }

                catch (Exception e)

                {

                    Console.WriteLine(System.DateTime.Now.ToShortTimeString() + "LBS EXCEPTION:" + e.Message);

     

                    Console.WriteLine(e.StackTrace);

                }

     

                                                       徐文兵   2009-12-23  上海  (原创 转贴请标出处)

  • 相关阅读:
    POJ 1141 括号匹配 DP
    881. Boats to Save People
    870. Advantage Shuffle
    874. Walking Robot Simulation
    文件操作
    861. Score After Flipping Matrix
    860. Lemonade Change
    842. Split Array into Fibonacci Sequence
    765. Couples Holding Hands
    763. Partition Labels
  • 原文地址:https://www.cnblogs.com/Bike/p/2469784.html
Copyright © 2011-2022 走看看