【问题标题】:Webservices: Error in deserializing body of reply messageWebservices:反序列化回复消息正文时出错
【发布时间】:2014-06-02 08:55:10
【问题描述】:

使用 Visual Studio 2010,我正在调用 SOAP Web 服务并不断收到错误消息“反序列化回复消息正文时出错”。

我这样调用 WS 方法:

    wsConfig.config_pttClient client = new wsConfig.config_pttClient();
    wsConfig.getConfigInput gci = new wsConfig.getConfigInput();
    wsConfig.getConfigOutput gco = new wsConfig.getConfigOutput();

    gco = client.getConfig(gci); // the exception is thrown here

该方法不需要输入数据:我使用 SoapUI 对其进行了测试,它工作正常。使用 fiddler,我看到了调用,并且所有数据的答案都是正确的。

研究了一段时间后,我尝试在xsd 中更改readerQuotas 之类的maxStringContentLengthmaxDepth 等,但没有成功。

我为getConfig 方法找到了一些解决方法:当我更改Reference.cs 文件并将System.DateTime 变量类型更改为string 时,它可以正常工作,但是我需要调用setConfig方法,并且更改会带来another problem...另外,我已经读过更改Web服务合同不是一个好习惯。

我一直在寻找解决方案,这里有一些我检查过的地方:thisthisthisthis

有人可以帮忙吗? 谢谢

【问题讨论】:

  • 网络上发生了什么(WCF tracing)?
  • @RowlandShaw,我很确定这与日期类型有关 - 这是我的跟踪文件的第一行:em System.Xml.Serialization.XmlSerializationReader.ToDateTime(String value)
  • 那么到底发生了什么?
  • 对不起,什么意思?
  • 使用 WCF 跟踪时,您可以注销“通过网络”发送和接收的消息 - 这允许您查看远程 Web 服务是否通过在格式错误、返回错误消息、返回未正确转义为 XML 的内容等 - 这将有助于理解 为什么 它无法反序列化回复。

标签: c# xml web-services soap xsd


【解决方案1】:

似乎我找到了解决问题的方法:

在服务引用下的reference.cs 文件中,我将每个DateTimeSystem.Nullable<System.DateTime> 对象更改为string 对象——正如我之前尝试过的那样——通过这种方式能够制作get 方法。

当尝试调用 set 方法时,我通过以下方式传递日期:

vt.beginDate = DateTime.Now.ToString("o");

ToString("o") 似乎是防止序列化问题的有效解决方案。

【讨论】:

  • 好吧,这似乎不是一个好的解决方案,因为每次服务更新后都会再次生成reference.cs
猜你喜欢
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多