简体   繁体   中英

Response from Web Service in Glassfish from C# client

I'm having a problem where my C# client can't parse the data from my webservice in Glassfish.

I have a WSDL and XSD for my webservices as follows:

And I'm using the next C# client to test this webservice:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ServicioInterventoria;

public partial class _Default : System.Web.UI.Page 
{
    ServicioInterventoria.ServicioInterventoria proxy;

    protected void Page_Load(object sender, EventArgs e)
    {
        proxy = new ServicioInterventoria.ServicioInterventoria();

        ResultadoMensualIC[] res = proxy.ObtenerResultadosMensuales("Intv12", "2014-07-07T08:08:08");

        System.Diagnostics.Debug.WriteLine(res.Length);
        System.Diagnostics.Debug.WriteLine(res[0].FechaCorte);

    }
}

The problem is that when I execute this code, the res array has the amount of objects that should have, but each value of each object has the default value instead of the correct value. I used Fiddler to check the traffic and it receives the correct SOAP response with the correct data, but it seems that my C# client doesn't know how to parse the data.

I checked with a Java client, and I can get the correct data without any problems, and seems that my C# it's the only one giving problems with this.

Maybe there is a problem with the targetNamespace in the SOAP response, but I don't understand why works correctly in Java but in C# just puts default values.

Anyone have any idea what could be the problem?

If someone needs more information about it, let me know

Thanks beforehand

I solved last week. The problem was that the SOAP response didn't put the namespace for each attribute, then, the C# client doesn't know how to match this (seems like a limitation of C#). And, the other problem was the order of the SOAP response, because, the C# client was expecting each object as was defined in the WSDL, but the response it's ordered alphabetically, in this way, the C# client, doesn't match correctly each attribute.

I did some modifications to the client. First, in each model, for each attribute I added the namespace, something like this:

@XmlElement(name = "IdInterventor", namespace = "http://ws.bigdatasolutions.co/")
public String getIdInterventor() {
    return IdInterventor;
}

With this, the SOAP response always puts the namespace for each attribute, which was neccesary for the C# client.

After that, at the beginning of each model class I add this tag, to define the order as defined in the WSDL and expected for the C# client.

@XmlRootElement(name = "AspectosFinancieros")
@XmlType(propOrder={"idInterventor", "numeroContrato", "ano", "valorContratoOperador", "fechaFirmaContrato",
                    "valorAdicion", "fechaProrrogaAdicion", "valorDesembolso", "fechaPagoDesembolso", 
                    "valorAnticipo", "fechaAnticipo", "valorUtilizacion", "numeroActaAprobacion",
                    "fechaUtilizacion", "valorRendimiento", "fechaRendimiento", "numeroComprobanteRendimiento",
                    "valorComision", "fechaComision", "valorGastosAdministrativos", "fechaGastosAdministrativos",
                    "nombreFiducia", "numeroContratoFiducia", "fechaContratoFiducia", "fechaProrrogaAdicionFiducia",
                    "marcaTiempo"})
public class AspectosFinancieros {

I checked the expected order in the auto generated class in the C# client.

I hope someone find this useful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM