返回WCF函数中的[Out]数组

时间:2017-07-11 10:13:45

标签: c# arrays wcf struct c++-cli

我在返回一个结构数组时遇到问题,而一个简单的结构完美无缺。服务器端:

[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测试客户端进行测试清楚地表明阵列已填充,已发回,因此问题在于客户端与数据的反序列化。虽然上面的结构本身应该作为推断数据契约工作,但我也尝试使用DataContractDataMember属性进行装饰,但行为没有任何差异。已知的类型用于不同的目的,但我也尝试过它们,以防万一,也没有区别。

什么会导致数组有问题,而不是结构本身?

1 个答案:

答案 0 :(得分:0)

毕竟这是一个数据合同问题。我不知道为什么因为推断的合同应该可行,所以它需要一个明确的名称,无论如何:

[StructLayout(LayoutKind::Sequential, Pack = 1)]
[DataContract(Name = "PAPER_INFO")]
public value struct PAPER_INFO {
  [DataMember] unsigned int PaperWidth;
  [DataMember] unsigned int PaperLength;
};