zoukankan      html  css  js  c++  java
  • java 跟.net webservice 互通问题(2)

    昨天跟国外的公司联调webservice回调环境,还是报错:

    soapStatus = 1 -

    <faultcode>soap:Client</faultcode>

    <faultstring>The request element <postSLOrderStatus xmlns='http://b2b.level3.com/voip/order/v4_1/'> was not recognized.</faultstring>

    <detail></detail>

    看来.net 跟java的调用真是存在问题,这两天经过同事帮忙,决定先在本地测试,我获得了他们发送的soap 包,

    找到了一篇资料,通过httpwebRequest来访问web service,如下:

    目录:

      1  后台调用Webservice的业务需求

      2  WebService支持的交互协议

      3  如何配置WebService支持的协议

      4  后台对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时,通过项目中引用现实部署的WebService的Asmx文件,生成客户端代理类的方式。这种方式将和WebService进行了二次封装,并以代理类的方式进行调用,有利用简单,快捷的开发。

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

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

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

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

      2  WebService支持的交互协议

      WebService支持 三种方式

      1)Http 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

      2)SOAP1.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>

      3)SOAP1.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>3  如何配置WebService支持的协议

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

      具体的配置方式为:

      在配置文件中

    <webServices>
      <protocols>
        <add name="HttpSoap1.2"/>
        <add name="HttpSoap1.1"/>
    </protocols>
    </webServices>

      4  后台对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);
                }

     注意.net 的webservice 的nameplace 应该跟java webservice那边的web service nameplace相同,不然调用不能成功

  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/encounter/p/2188787.html
Copyright © 2011-2022 走看看