Interop问题调用来自.net的复杂类型参数的jax-ws服务 - 由服务器接收为null的字段

时间:2010-03-01 07:44:09

标签: .net wcf jax-ws

我在glassfish v3中创建了一个Web服务。我尝试使用Visual Studio 2008中生成的客户端从.net调用的方法接受一个基本上是java bean的参数 - 简单类型(Double,String,Date)作为带有getter和setter的字段(实际上它是一个EJB实体)类)。我发现当我从我的c#客户端调用该方法时,服务器会收到Double和Date参数(但不是String的参数)的空值。有趣的是,我在java net beans生成的客户端中也遇到了这个问题,直到我在Web服务实现中使bean的字段受保护而不是私有,但在java情况下,包括String在内的所有非基本类型都以null形式出现。

由于java客户端现在正常工作,似乎问题在于.net正在编组数据。我想知道我是否可以使用服务器端的注释更改服务器生成wsdl的方式,以便.net以正确的方式解释它,或者以某种方式控制.net如何生成客户端 - 使用参数到命令行工具而不是例如,使用visual studio生成客户端。我真的不想手工建立客户。

1 个答案:

答案 0 :(得分:1)

在.NET端生成的类可能包含“FooSpecified”字段,用于指示是否设置了“Foo”属性/字段。这些类型(Double,DateTime)在SOAP / WebServices / Java中可以为空,但在.NET中不可为空,这是一个不幸的副作用。而不是字段的Nullable,而是可能有一个额外的布尔字段用于指示是否指定了这些字段。在将这些字段发送到您的Web服务之前,请尝试将这些字段显式设置为true。