之前从未见过这个。
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?并且以某种方式'神奇地'返回这个神秘物体应该抛出异常?
答案 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服务以查看其中发生的情况。我假设您在内部实现此功能,因为您可以将其设置为常量虚拟值。