2014-01-20 17 views
1

尝试通过WCF(开发)传递集合(整数,字符串,对象列表无关紧要)集合在Visual Studio 2012中),集合中的项目不存在。没有错误,复杂对象本身的集合属性不为null,只有集合的内容缺失。Delphi无法正确序列化WCF服务集合(列表/整数,字符串,对象等数组)正确

服务接口包含许多与来自不同卫星程序集数据的合同的方法:

[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; } 
} 

使用招,Delphi的生成的SOAP请求比由WCF测试客户端生成的消息稍有不同:

Fiddler

我在2010年的Delphi测试此问题,XE2,并且与任何方法WCF服务可容易地再现其中一个复杂的数据传送对象参数包含一个集合(数组,List,IEnumerable,无所谓)。

是否有'绝招'使Delphi的SOAP名称空间正确?有没有一个德尔福WSDL导入选项(使用WSDL导入用户界面)缺失(或我需要取消检查): WSDL Import Options

有什么我可以做WCF服务本身不会破坏现有合同?

我已经确认端点是basicHttpBinding,尝试使用XmlSerializerFormat(下面的图像,它适用于Delphi,遇到其他问题),但打破已有的现有的.Net客户端/实现。

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

的代码,请不要粘贴截图解决问题。粘贴代码。 –

+0

我放弃了将Delphi直接连接到WCF。我总是最终在.NET中制作一个中间DLL,通过COM公开所需的功能。 – whosrdaddy

+0

@DavidHeffernan:谢谢你的回复。代码本身没有/不像问题行为那么重要。我不想深入了解如何正确命名命名空间的具体语法和风扇火焰。 – KevinRF

回答

1

我能够通过选择“地图纯藏品包装类类型

WSDL Import Options Dialog

+0

某些类型的数组对于设置Fxxx__Specified属性有问题。您可以手动更改SetxxxArray函数以将Fxxx__Specified设置为true。 – mkysoft

相关问题