【问题标题】:Invoking a Java/AXIS Web Service from .NET: the ‘return null’ issue从 .NET 调用 Java/AXIS Web 服务:“返回 null”问题
【发布时间】:2011-12-22 11:51:18
【问题描述】:

我一直在通过所有 google、stackoverflow 等寻找这个问题。 我找到了很多相关的答案,但不是真正的解决方案。

我正在使用 .NET 客户端的 Axis 服务,但返回始终为空,无论我发送什么参数,始终为空。

于是我开始查看,并尝试从 SOAPUI 中使用它,它成功了!。

所以我的第一个想法是,.NET 做错了什么,我搜索和搜索,我发现命名空间存在一些问题。

相关帖子 here

因此,在此之后,我尝试通过服务引用、Web 引用使用服务,使用 WSDL.EXE 创建代理(创建得非常好!)并查找所有命名空间,但一切都很好。我做了对命名空间进行了一些更改,但没有任何更改。

然后我发现不仅命名空间有问题,数组也有问题;实际上服务返回类似这样的东西。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <InformacionPolizaResponse xmlns="http://www.openuri.org/">
         <ns1:Poliza xmlns:ns1="http://www.example.org/PolizasBanorteSchema">
            <ns1:Numero>0036887</ns1:Numero>
            <ns1:Serie></ns1:Serie>
            <ns1:Ramo>00110</ns1:Ramo>
            <ns1:Subramo>00110</ns1:Subramo>
            <ns1:Inciso></ns1:Inciso>
            <ns1:ClaveAgente>000270</ns1:ClaveAgente>
            <ns1:NombreAgente>NOMBRE PENDIENTE</ns1:NombreAgente>
            <ns1:NumeroOficina></ns1:NumeroOficina>
            <ns1:FechaEmision>2011-02-15</ns1:FechaEmision>
            <ns1:FechaInicioVigencia>2011-02-15</ns1:FechaInicioVigencia>
            <ns1:FechaFinVigencia>2012-02-15</ns1:FechaFinVigencia>
            <ns1:Estatus>03</ns1:Estatus>
            <ns1:NombreContratante>CARLOS ZARATE JIMENEZ</ns1:NombreContratante>
            <ns1:RfcContratante>ZAJC720213K98</ns1:RfcContratante>
            <ns1:Telefono>0449626251463</ns1:Telefono>
            <ns1:Moneda>1</ns1:Moneda>
            <ns1:FormaPago>003</ns1:FormaPago>
            <ns1:PrimaPrimerPago>237.84</ns1:PrimaPrimerPago>
            <ns1:PrimaPagoSubsecuente>237.84</ns1:PrimaPagoSubsecuente>
            <ns1:PrimaNeta>951.36</ns1:PrimaNeta>
            <ns1:FinancPagofraccionado></ns1:FinancPagofraccionado>
            <ns1:GastosExpedicion>.00</ns1:GastosExpedicion>
            <ns1:IVA></ns1:IVA>
            <ns1:PrimaTotal></ns1:PrimaTotal>
            <ns1:PolizaOrigen>0036887</ns1:PolizaOrigen>
            <ns1:PolizaRenueva>0000000</ns1:PolizaRenueva>
            <ns1:Producto></ns1:Producto>
            <ns1:Plan></ns1:Plan>
            <ns1:Asegurados>
               <ns1:item>
                  <ns1:Nombre>CARLOS ZARATE JIMENEZ</ns1:Nombre>
                  <ns1:Clave></ns1:Clave>
                  <ns1:Direccion>
                     <ns1:Calle></ns1:Calle>
                     <ns1:Colonia></ns1:Colonia>
                     <ns1:Poblacion></ns1:Poblacion>
                     <ns1:Estado></ns1:Estado>
                     <ns1:CP></ns1:CP>
                     <ns1:Texto></ns1:Texto>
                  </ns1:Direccion>
                  <ns1:FechaNacimiento>1972-02-13</ns1:FechaNacimiento>
                  <ns1:Sexo>1</ns1:Sexo>
                  <ns1:Fumador>1</ns1:Fumador>
                  <ns1:Parentesco>0</ns1:Parentesco>
                  <ns1:AntiguedadDesde></ns1:AntiguedadDesde>
                  <ns1:Coberturas>
                     <ns1:item>
                        <ns1:Clave>00150</ns1:Clave>
                        <ns1:Seccion></ns1:Seccion>
                        <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura>
                        <ns1:LimiteMaximo>250,000</ns1:LimiteMaximo>
                        <ns1:Deducible>.00</ns1:Deducible>
                        <ns1:Prima>820.00</ns1:Prima>
                        <ns1:EdadCalculo>039</ns1:EdadCalculo>
                        <ns1:PlazoSeguro></ns1:PlazoSeguro>
                        <ns1:PlazoPago></ns1:PlazoPago>
                        <ns1:SumaAsegurada>250,000</ns1:SumaAsegurada>
                        <ns1:Coaseguro>.00</ns1:Coaseguro>
                     </ns1:item>
                     <ns1:item>
                        <ns1:Clave>00150</ns1:Clave>
                        <ns1:Seccion></ns1:Seccion>
                        <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura>
                        <ns1:LimiteMaximo>250,000</ns1:LimiteMaximo>
                        <ns1:Deducible>.00</ns1:Deducible>
                        <ns1:Prima>95.00</ns1:Prima>
                        <ns1:EdadCalculo>039</ns1:EdadCalculo>
                        <ns1:PlazoSeguro></ns1:PlazoSeguro>
                        <ns1:PlazoPago></ns1:PlazoPago>
                        <ns1:SumaAsegurada>250,000</ns1:SumaAsegurada>
                        <ns1:Coaseguro>.00</ns1:Coaseguro>
                     </ns1:item>
                     <ns1:item>
                        <ns1:Clave>00150</ns1:Clave>
                        <ns1:Seccion></ns1:Seccion>
                        <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura>
                        <ns1:LimiteMaximo>500</ns1:LimiteMaximo>
                        <ns1:Deducible>.00</ns1:Deducible>
                        <ns1:Prima>36.36</ns1:Prima>
                        <ns1:EdadCalculo>039</ns1:EdadCalculo>
                        <ns1:PlazoSeguro></ns1:PlazoSeguro>
                        <ns1:PlazoPago></ns1:PlazoPago>
                        <ns1:SumaAsegurada>500</ns1:SumaAsegurada>
                        <ns1:Coaseguro>.00</ns1:Coaseguro>
                     </ns1:item>
                  </ns1:Coberturas>
                  <ns1:Beneficiarios/>
               </ns1:item>
            </ns1:Asegurados>
            <ns1:Incisos/>
            <ns1:Recibos>
               <ns1:item>
                  <ns1:NumeroRecibo>5183648</ns1:NumeroRecibo>
                  <ns1:FechaEmision>2011-02-15</ns1:FechaEmision>
                  <ns1:FechaEstatus>2011-02-26</ns1:FechaEstatus>
                  <ns1:FechaPago>2011-02-26</ns1:FechaPago>
                  <ns1:Estatus>00</ns1:Estatus>
                  <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus>
                  <ns1:Importe>000000275.89</ns1:Importe>
                  <ns1:Recargos>.00</ns1:Recargos>
                  <ns1:DerechoPoliza>.00</ns1:DerechoPoliza>
                  <ns1:FechaInicioVigencia>2011-02-15</ns1:FechaInicioVigencia>
                  <ns1:FechaFinVigencia>2011-05-15</ns1:FechaFinVigencia>
                  <ns1:PrimaTotal xsi:nil="true"/>
                  <ns1:PrimaPagada xsi:nil="true"/>
                  <ns1:PrimaPendiente xsi:nil="true"/>
               </ns1:item>
               <ns1:item>
                  <ns1:NumeroRecibo>5183649</ns1:NumeroRecibo>
                  <ns1:FechaEmision>2011-02-15</ns1:FechaEmision>
                  <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus>
                  <ns1:FechaPago>1900-00-00</ns1:FechaPago>
                  <ns1:Estatus>00</ns1:Estatus>
                  <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus>
                  <ns1:Importe>000000275.89</ns1:Importe>
                  <ns1:Recargos>.00</ns1:Recargos>
                  <ns1:DerechoPoliza>.00</ns1:DerechoPoliza>
                  <ns1:FechaInicioVigencia>2011-05-15</ns1:FechaInicioVigencia>
                  <ns1:FechaFinVigencia>2011-08-15</ns1:FechaFinVigencia>
                  <ns1:PrimaTotal xsi:nil="true"/>
                  <ns1:PrimaPagada xsi:nil="true"/>
                  <ns1:PrimaPendiente xsi:nil="true"/>
               </ns1:item>
               <ns1:item>
                  <ns1:NumeroRecibo>5183650</ns1:NumeroRecibo>
                  <ns1:FechaEmision>2011-02-15</ns1:FechaEmision>
                  <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus>
                  <ns1:FechaPago>1900-00-00</ns1:FechaPago>
                  <ns1:Estatus>00</ns1:Estatus>
                  <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus>
                  <ns1:Importe>000000275.89</ns1:Importe>
                  <ns1:Recargos>.00</ns1:Recargos>
                  <ns1:DerechoPoliza>.00</ns1:DerechoPoliza>
                  <ns1:FechaInicioVigencia>2011-08-15</ns1:FechaInicioVigencia>
                  <ns1:FechaFinVigencia>2011-11-15</ns1:FechaFinVigencia>
                  <ns1:PrimaTotal xsi:nil="true"/>
                  <ns1:PrimaPagada xsi:nil="true"/>
                  <ns1:PrimaPendiente xsi:nil="true"/>
               </ns1:item>
               <ns1:item>
                  <ns1:NumeroRecibo>5183651</ns1:NumeroRecibo>
                  <ns1:FechaEmision>2011-02-15</ns1:FechaEmision>
                  <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus>
                  <ns1:FechaPago>1900-00-00</ns1:FechaPago>
                  <ns1:Estatus>00</ns1:Estatus>
                  <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus>
                  <ns1:Importe>000000275.89</ns1:Importe>
                  <ns1:Recargos>.00</ns1:Recargos>
                  <ns1:DerechoPoliza>.00</ns1:DerechoPoliza>
                  <ns1:FechaInicioVigencia>2011-11-15</ns1:FechaInicioVigencia>
                  <ns1:FechaFinVigencia>2012-02-15</ns1:FechaFinVigencia>
                  <ns1:PrimaTotal xsi:nil="true"/>
                  <ns1:PrimaPagada xsi:nil="true"/>
                  <ns1:PrimaPendiente xsi:nil="true"/>
               </ns1:item>
            </ns1:Recibos>
            <ns1:Endosos/>
            <ns1:Siniestros/>
         </ns1:Poliza>
      </InformacionPolizaResponse>
   </soapenv:Body>
</soapenv:Envelope>

(我从 SOAPUI 获得了这个示例)。

相关帖子是here

我也试过this

here 那里得到了另一个可能的麻烦,其中列出了一个名为“item”的数组项,正如您在上面提到的 WebServiceResponse 中看到的那样,它们是这样列出的。所以在我看来,一切都是来自 c# 的反序列化问题。看着我找到了所有这一切的半解决方案。

现实情况是,.NET 实际上得到了很好的响应,它所具有的只是反序列化步骤的问题,可能是上述所有可能的原因(多个命名空间、数组、名为“item”的数组项)。

http://www.codeproject.com/KB/webservices/Java_WS_NET.aspx

我像这样覆盖了代理中的方法:

protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
    {
        WebResponse wr = base.GetWebResponse(request);
        StreamReader sr = new StreamReader(wr.GetResponseStream());
        //throw new Exception(sr.ReadToEnd());
        return wr ;      
    }

我抛出了异常来查看 Service 的结果是否被捕获并且实际上就在那里!

所以毕竟操作系统,我不知道是否有修复、服务包、有人找到解决方案或任何我可以如何正确地解散 WebResponse。或者如何正确使用该轴服务,我认为最好的方法是正确序列化响应覆盖该方法,因为它似乎是.NET的一个错误,我认为它有问题,因为所有数组都有一个“项目"就可以了。

提前感谢您阅读这篇文章。

我真的很感激任何帮助!

再次感谢!

【问题讨论】:

    标签: c# asp.net web-services serialization axis


    【解决方案1】:

    最后我解决了这个问题,我的一个朋友帮助了我,显然 WSDL 和命名空间存在问题。 C# 生成代理错误。不知道是c#问题还是轴问题。但希望这个答案对其他人有所帮助。 查看 WebService 方法上的所有命名空间。 C# 生成了一个这样的方法。

    /// <remarks/>
            [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.openuri.org/InformacionPoliza", RequestNamespace = "http://www.openuri.org/", ResponseNamespace = "http://www.openuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
            [return: System.Xml.Serialization.XmlElementAttribute("Poliza")]
            public Poliza InformacionPoliza(CriteriosPoliza CriteriosPoliza)
            {
                object[] results = this.Invoke("InformacionPoliza", new object[] {
                        CriteriosPoliza});
                return ((Poliza)(results[0]));
            }
    

    但是在 WSDL 中有这样的东西..

    <wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://www.openuri.org/" xmlns:intf="http://www.openuri.org/" xmlns:tns1="http://www.example.org/PolizasBanorteSchemaCriterios" **xmlns:tns2="http://www.example.org/PolizasBanorteSchema"** xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.openuri.org/">
    <!--
    WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)
    -->
    <wsdl:types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.openuri.org/">
    <import namespace="http://www.example.org/PolizasBanorteSchema"/>
    <import namespace="http://www.example.org/PolizasBanorteSchemaCriterios"/>
    <element name="InformacionPoliza">
    <complexType>
    <sequence>
    <element name="CriteriosPoliza" type="tns1:CriteriosPoliza"/>
    </sequence>
    </complexType>
    </element>
    <element name="InformacionPolizaResponse">
    <complexType>
    <sequence>
    **<element name="Poliza" type="tns2:Poliza"/>**
    </sequence>
    </complexType>
    </element>
    </schema>
    

    查看&lt;element name="Poliza" type="tns2:Poliza"/&gt; 它指的是tns2 命名空间 它说xmlns:tns2="http://www.example.org/PolizasBanorteSchema"

    所以.NET生成的代理是错误的,应该是这样的

    /// <remarks/>
            [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.openuri.org/InformacionPoliza", RequestNamespace = "http://www.openuri.org/", ResponseNamespace = "http://www.openuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
            [return: System.Xml.Serialization.XmlElementAttribute("Poliza", Namespace = "http://www.example.org/PolizasBanorteSchema")]
            public Poliza InformacionPoliza(CriteriosPoliza CriteriosPoliza)
            {
                object[] results = this.Invoke("InformacionPoliza", new object[] {
                        CriteriosPoliza});
                return ((Poliza)(results[0]));
            }
    

    命名空间发挥了作用,

      [return: System.Xml.Serialization.XmlElementAttribute("Poliza", Namespace = "http://www.example.org/PolizasBanorteSchema")]
    

    更改了那行代码,一切都像魅力一样 因此,在轴服务中使用数组和不同的命名空间时要小心,在生成 c# 客户端时可能会遇到一些问题。

    This post 是对的 :)

    【讨论】:

    • 感谢您的帖子,它准确地回答了我在使用基于 OC4J 的 Web 服务以及文档/文字服务和自定义 WSDL 时遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2012-04-07
    • 2011-09-13
    • 2014-06-20
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多