2014-01-20 18 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

相關問題