我在返回一个结构数组时遇到问题,而一个简单的结构完美无缺。服务器端:
[OperationContract] long GetPapers([Out] array<PAPER_INFO>^% PaperInfo); -- FAIL
[OperationContract] long GetPaper([Out] PAPER_INFO% PaperInfo); -- SUCCESS
客户方:
[OperationContract] long GetPapers(out PAPER_INFO[] PaperInfo); -- FAIL
[OperationContract] long GetPaper(out PAPER_INFO PaperInfo); -- SUCCESS
失败我的意思是没有错误消息,只是一个空数组进来。结构很简单,只使用简单类型,没有序列化问题。
[StructLayout(LayoutKind::Sequential, Pack = 1)]
public value struct PAPER_INFO {
unsigned int PaperWidth;
unsigned int PaperLength;
};
登录服务器并使用WCF测试客户端进行测试清楚地表明阵列已填充,已发回,因此问题在于客户端与数据的反序列化。虽然上面的结构本身应该作为推断数据契约工作,但我也尝试使用DataContract
和DataMember
属性进行装饰,但行为没有任何差异。已知的类型用于不同的目的,但我也尝试过它们,以防万一,也没有区别。
什么会导致数组有问题,而不是结构本身?
答案 0 :(得分:0)
毕竟这是一个数据合同问题。我不知道为什么因为推断的合同应该可行,所以它需要一个明确的名称,无论如何:
[StructLayout(LayoutKind::Sequential, Pack = 1)]
[DataContract(Name = "PAPER_INFO")]
public value struct PAPER_INFO {
[DataMember] unsigned int PaperWidth;
[DataMember] unsigned int PaperLength;
};