0

我有一个 WCF 服务,但只有一种方法:

[OperationContract]
void SaveDocument (InwardDocument doc);

[DataContract]
public class InwardDocument{
   [DataMember]
   public Citizen Citizen {get;set;}
   ....
}

[DataContract]
public class Citizen{
   [DataMember]
   public string LastName {get;set;}
   ....
}

我已经使用 WCF 测试客户端和单独的 .NET 控制台应用程序测试了该服务。在这两种情况下,服务都按预期工作。但是当 java 客户端尝试使用它时,就会出现反序列化问题。我在 SaveDocument 方法中放置了一些标记,以查看导致问题的原因:

public void SaveDocument(InwardDocument doc){
   if(doc==null)
      throw new ArgumentnullException("InwardDocument");
   if(doc.Citizen==null)
      throw new ArgumentnullException("InwardDocument.Citizen");//This exception is thrown when consumed by java client
}

如您所见,第一个异常被跳过,这意味着doc参数本身不为空,但由于某种原因,Citizen 属性为空。在 java 客户端中生成请求的人通过调试代码确认 InwardDocument.Citizen 属性不为空。事实上,我们在我在这个 SO 线程中描述的那个 java 客户端中生成代理类时遇到了问题。所以我假设它与同样的问题有关。也许我需要为我的类及其成员添加更多属性来处理其他平台可能发生的任何此类问题?任何建议表示赞赏。

4

2 回答 2

1

您是否尝试在 InwardDocument 类中添加 Know Type 属性。请参阅此处的链接。

[DataContract]
[KnownType(typeof(Citizen))]
public class InwardDocument{
   [DataMember]
   public Citizen Citizen {get;set;}
   ....
}
于 2015-08-18T05:50:09.793 回答
0

该问题是由相应的 JAXBelement 实例的错误创建引起的。问题的解决方案在这个 SO thread answer

于 2015-08-18T14:25:25.533 回答