Вызов веб-службы Java/AXIS с .NET: проблема с возвратом null
Я искал эту проблему через все google, stackoverflow и многое другое.
И я нашел много связанных с ним ответов, но не реальное решение.
Я использую службу Axis от .NET-клиента, но возврат всегда равен нулю, независимо от того, какие параметры я отправляю, всегда имеет значение null.
Итак, я начал искать, и я попытался использовать его из SOAPUI, и это сработало!
Итак, моя первая мысль:.NET делает что-то неправильно, и я искал и искал, и я обнаружил, что есть проблемы с пространствами имен.
Связанное сообщение здесь
Итак, после этого я попытался использовать Сервис через Service Reference, Web Reference, создав прокси с WSDL.EXE(он был создан довольно хорошо!) и искал все пространства имен, но All lokked good.. Я сделал некоторые изменения к нему в пространство имен, но ничего.
Тогда я обнаружил, что не просто пространства имен являются проблематикой, а также массивами; и на самом деле служба возвращает что-то вроде этого.
<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).
Связанный пост здесь
Я также попробовал этот.
И получили еще одну возможную проблему из здесь с перечисленными элементами массива с именем "item", как вы можете видеть в упомянутом выше WebServiceResponse, они перечислены как это. Поэтому мне казалось, что это проблема десериализации из С#. И, глядя, я нашел половину решения для всего этого.
Реальность заключалась в том, что на самом деле .NET получал ответ довольно хорошо, все, что у него есть, - это проблема с шагом десериализации, возможно, для всех упомянутых выше причин posibles (множественные пространства имен, массивы, элементы массива, названные как "элемент" ).
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 ;
}
Я выбрал исключение, чтобы узнать, был ли получен результат Сервиса и на самом деле там!
Итак, после всего этого я не знаю, есть ли исправление, пакет обновления, кто-то нашел решение или что-то вроде того, КАК Я МОГУ ОПРЕДЕЛИТЬ ПРАВИЛЬНО WebResponse. Или как правильно использовать эту службу оси, я думаю, что лучший подход к этому - просто сериализовать ответ, правильно переопределяющий метод, потому что он кажется ошибкой .NET. Я думаю, что у него проблемы с этим, потому что у всего массива есть элемент "на нем.
Заранее благодарим за это сообщение.
Я действительно очень благодарен за любую помощь!
Еще раз спасибо!
Ответы
Ответ 1
Наконец, я решил эту проблему, мой друг помог мне, видимо, были проблемы с WSDL и пространствами имен. С# неправильно сгенерировал прокси. Не знаю, проблема с С# или проблема с осью. Но надеюсь, что этот ответ поможет кому угодно.
Взгляните на все пространства имен методов WebService. С# Создал такой метод.
/// <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>
Посмотрите на <element name="Poliza" type="tns2:Poliza"/>
, это относится к пространству имен 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")]
Изменена эта строка кода, и все работает как шарм
Поэтому будьте осторожны при использовании массивов и различных пространств имен в службе оси, у вас могут возникнуть проблемы с созданием клиента С#.
Этот пост был прав:)