2011-11-05 123 views
10

我一直在寻找这个问题,通过所有的谷歌,stackoverflow和更多。 我发现了很多相关的答案,但不是真正的解决方案。从.NET调用Java/AXIS Web服务:'返回null'问题

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

所以我开始看,我试图从 SOAPUI消耗它,它的工作!所以我的第一个想法是,.NET做错了什么,我搜索和搜索,我发现这里有一些命名空间的问题。

相关岗位 here

所以在此之后,我试图通过消费服务引用,Web引用的服务,创建具有WSDL.EXE代理(它的建立非常好!),寻找所有命名空间,但所有lokked好..我做了一些改变,它的命名空间,但没有。

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

<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获得的响应非常好,它所具有的一切都是反序列化步骤的问题,可能是上述所有可能原因(多个名称空间,数组,项目名称类似于“项目”)。

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

我在代理overrided的方法是这样的:

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 ;  
    } 

我抛出的异常,看是否服务的结果被获取,并在事实上就在那里!

因此,毕竟os我不知道是否有修复程序,服务包,有人发现了一个解决方案或任何如何我可以正确DESEREALIZE正确的WebResponse。或者如何正确使用axis服务,我认为最好的方法就是正确地序列化正确的覆盖该方法的响应,因为它看起来像.NET的缺陷,我认为它有问题,因为所有的数组都有一个“item “ 在上面。

在此先感谢您阅读本文。

我真的真的会赞赏任何帮助!

再次感谢!

回答

9

最后,我解决了这个问题,我的一个朋友帮助了我,显然有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> 

看它是指tns2命名空间 的<element name="Poliza" type="tns2:Poliza"/>和它说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")] 

改变了这行代码,一切工作就像一个魅力 因此,在轴的服务使用数组和diferent命名空间时要小心,你可能有一些问题产生的交流#客户。

This post是正确的:)

+2

谢谢你的职位,它回答说正好一个问题,我使用了与文档/文字服务和定制的WSDL OC4J基于Web的服务。 – Etienne