我遇到问题,我的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#中只是放置默认值。
任何人都知道可能是什么问题?
如果有人需要更多相关信息,请与我们联系
事先谢谢
答案 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#客户端中检查了自动生成的类中的预期顺序。
我希望有人觉得这很有用。