尝试通过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测试客户端生成的消息稍有不同:
我在2010年的Delphi测试此问题,XE2,并且与任何方法WCF服务可容易地再现其中一个复杂的数据传送对象参数包含一个集合(数组,List,IEnumerable,无所谓)。
是否有'绝招'使Delphi的SOAP名称空间正确?有没有一个德尔福WSDL导入选项(使用WSDL导入用户界面)缺失(或我需要取消检查):
有什么我可以做WCF服务本身不会破坏现有合同?
我已经确认端点是basicHttpBinding,尝试使用XmlSerializerFormat(下面的图像,它适用于Delphi,遇到其他问题),但打破已有的现有的.Net客户端/实现。
[ServiceContract(Name = "Delphi", Namespace = "SomeRandomNamespace")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document, Use = OperationFormatUse.Literal)]
public interface IDelphiCompatibleOrderTakingService
的代码,请不要粘贴截图解决问题。粘贴代码。 –
我放弃了将Delphi直接连接到WCF。我总是最终在.NET中制作一个中间DLL,通过COM公开所需的功能。 – whosrdaddy
@DavidHeffernan:谢谢你的回复。代码本身没有/不像问题行为那么重要。我不想深入了解如何正确命名命名空间的具体语法和风扇火焰。 – KevinRF