尝试通过WCF(在Visual Studio 2012中开发)传递集合(整数,字符串,对象列表,无关紧要),集合中的项目不存在。没有错误,复杂对象本身的集合属性不为空,只有集合的内容丢失。
服务接口包含许多方法,这些方法包含来自各种附属程序集的数据合同:
[OperationContract]
EmailPreferencesUpdateResponse UpdateEmailPreferences(EmailPreferencesUpdateRequest request);
public class EmailPreferencesUpdateRequest
{
public int EmailId { get; set; }
public string AccountNumber { get; set; }
public int EmailFormat { get; set; }
public string EmailAddress { get; set; }
public int[] EmailPreferences { get; set; }
}
使用Fiddler,Delphi生成的SOAP请求与WCF测试客户端生成的消息略有不同:
我已经在Delphi 2010,XE2中测试了这种行为,并且可以在任何WCF服务中轻松地重现,其复杂数据传输对象参数包含一个集合(数组,列表,IEnumerable,不是'重要)。
是否有' 技巧'获得Delphi SOAP名称空间是否正确?是否缺少Delphi WSDL导入选项(使用WSDL导入UI)(或者我需要取消检查):
我可以对WCF服务本身做些什么来破坏现有合同吗?
我已经确定端点是basicHttpBinding,尝试使用XmlSerializerFormat(下面的图片,它为Delphi工作,遇到了其他问题),但打破了现有.Net中使用的现有合同客户端/实现。
[ServiceContract(Name = "Delphi", Namespace = "SomeRandomNamespace")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document, Use = OperationFormatUse.Literal)]
public interface IDelphiCompatibleOrderTakingService
答案 0 :(得分:2)
我能够通过选择'将纯集合映射到包装类类型'来解决问题