将 Java 客户端请求反序列化到 WCF 服务时出错
Error when deserializing Java client request to WCF service
我的 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 属性 不为空。事实上,我们在 java 客户端中生成代理 class 时遇到了问题,我在 中对此进行了描述。所以我假设它与相同的 problem.Maybe 有关,我需要向我的 classes 及其成员添加更多属性,以解决其他平台可能出现的任何此类问题?任何建议表示赞赏。
您是否尝试过在 InwardDocument 中添加 Know Type 属性 class。参见 link here。
[DataContract]
[KnownType(typeof(Citizen))]
public class InwardDocument{
[DataMember]
public Citizen Citizen {get;set;}
....
}
问题是由于相应的 JAXBelement 实例的创建不正确造成的。问题的解决方案在
我的 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 属性 不为空。事实上,我们在 java 客户端中生成代理 class 时遇到了问题,我在
您是否尝试过在 InwardDocument 中添加 Know Type 属性 class。参见 link here。
[DataContract]
[KnownType(typeof(Citizen))]
public class InwardDocument{
[DataMember]
public Citizen Citizen {get;set;}
....
}
问题是由于相应的 JAXBelement 实例的创建不正确造成的。问题的解决方案在