来自C#客户端的Glassfish Web Service的响应

时间:2014-09-17 15:49:52

标签: java c# web-services soap glassfish

我遇到问题,我的C#客户端无法解析Glassfish中我的网络服务中的数据。

我的Web服务有一个WSDL和XSD,如下所示:

我正在使用下一个C#客户端来测试这个Web服务:

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

    }
}

问题在于,当我执行此代码时,res数组具有应该具有的对象数量,但每个对象的每个值都具有默认值而不是正确的值。我使用Fiddler检查流量,并使用正确的数据接收正确的SOAP响应,但似乎我的C#客户端不知道如何解析数据。

我使用Java客户端进行了检查,我可以毫无问题地获得正确的数据,而且我的C#似乎是唯一一个给出问题的人。

也许SOAP响应中的targetNamespace存在问题,但我不明白为什么在Java中正常工作但在C#中只是放置默认值。

任何人都知道可能是什么问题?

如果有人需要更多相关信息,请与我们联系

事先谢谢

1 个答案:

答案 0 :(得分:0)

我上周解决了。问题是SOAP响应没有为每个属性设置命名空间,然后,C#客户端不知道如何匹配它(似乎是C#的限制)。而且,另一个问题是SOAP响应的顺序,因为,C#客户端期望每个对象都是在WSDL中定义的,但它按字母顺序排序的响应,这样,C#客户端,并没有&# 39; t正确匹配每个属性。

我对客户做了一些修改。首先,在每个模型中,我为每个属性添加了名称空间,如下所示:

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

有了这个,SOAP响应总是为每个属性设置名称空间,这对C#客户端来说是必要的。

之后,在每个模型类的开头添加此标记,以定义WSDL中定义的顺序以及C#客户端所期望的顺序。

@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 {

我在C#客户端中检查了自动生成的类中的预期顺序。

我希望有人觉得这很有用。