Delphi无法正确序列化WCF服务集合(整数,字符串,对象等的列表/数组)

时间:2014-01-20 16:09:28

标签: wcf delphi delphi-xe2 delphi-2010

尝试通过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测试客户端生成的消息略有不同:

Fiddler

我已经在Delphi 2010,XE2中测试了这种行为,并且可以在任何WCF服务中轻松地重现,其复杂数据传输对象参数包含一个集合(数组,列表,IEnumerable,不是'重要)。

是否有' 技巧'获得Delphi SOAP名称空间是否正确?是否缺少Delphi WSDL导入选项(使用WSDL导入UI)(或者我需要取消检查): WSDL Import Options

我可以对WCF服务本身做些什么来破坏现有合同吗?

我已经确定端点是basicHttpBinding,尝试使用XmlSerializerFormat(下面的图片,它为Delphi工作,遇到了其他问题),但打破了现有.Net中使用的现有合同客户端/实现。

[ServiceContract(Name = "Delphi", Namespace = "SomeRandomNamespace")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document, Use = OperationFormatUse.Literal)]
public interface IDelphiCompatibleOrderTakingService

1 个答案:

答案 0 :(得分:2)

我能够通过选择'将纯集合映射到包装类类型'来解决问题

WSDL Import Options Dialog