Web Service返回具有空字段的对象

时间:2009-03-26 13:11:16

标签: c# .net wcf web-services

之前从未见过这个。

WebService.Implementation imp = new WebService.Implementation();
WebService.ImplementationRequest req = new WebService.ImplementationRequest();
return imp.GetValue(req);

imp返回的对象不为null。它按预期返回ImplementationResponse。但该对象中的所有字段都为空。这不是预期的。目前,WebService只返回一些常量虚拟数据。我们已经在另一台开发人员的机器上测试了这个,运行得很好。

我想我还应该注意,如果我将null传递给GetValue方法,WebService应该抛出异常。它没有。不适合我。

任何想法我的环境可能会导致WebService返回一个对象,但是该对象中的每个值都为null?并且以某种方式'神奇地'返回这个神秘物体应该抛出异常?

3 个答案:

答案 0 :(得分:9)

当生成的代码与Web服务返回的xml之间存在差异时,通常会发生这种情况,因此无法对其进行反序列化。

再次抓取wsdl,重新生成所有代理类,然后重试。确保发送正确的虚拟数据。

更新

过去常常发生这种情况,因为我的团队并未管理网络服务,我们也不会注意到对服务所做的更改。我们最终拦截了Web服务管道中的soap消息以进行调试。 Here是帮助您顺利前进的绝佳资源。

您不需要更改管道中的任何内容,只需抓取soap消息并保存它们,以便稍后进行调试。大多数时候,事实证明这是合同的变化。其他时候我们没有合同,因此没有办法在不抓住信封的情况下知道变化。

无论如何,即使这不是你的问题,我认为这是一件好事。

答案 1 :(得分:3)

字段是否标有<数据成员()>属性,否则他们不会序列化?

<DataMember()> _
Public Property SomeField() As String
    Get
        Return m_strSomeField
    End Get
    Private Set(ByVal value As String)
        m_strSomeField= value
    End Set
End Property

另外,请考虑使用跟踪查看器来分析客户端和服务器之间发送的消息。有关信息,请参阅:

https://stackoverflow.com/questions/560370/handling-wcf-proxy-null-return-issue

答案 2 :(得分:0)

  

我想我也应该注意到   WebService应该抛出异常   如果我将null传递给GetValue   方法

你没有在这里传递null,你传入了一个请求对象。

此外,您需要能够调试到Web服务以查看其中发生的情况。我假设您在内部实现此功能,因为您可以将其设置为常量虚拟值。