2011-07-22 113 views
2

我想在ASP.NET 2.0 Web應用程序中訪問使用basicHttpBinding公開的WCF服務。這些服務使用實體框架4.0,其業務實體使用ADO.NET自我追蹤實體生成器T4模板創建。我可以附加到從ASP.NET 2.0應用程序的服務就好了,編譯,但在運行時,當我嘗試調用服務來保存時,我得到以下錯誤:從ASP.NET 2.0訪問WCF服務

格式化程序嘗試嘗試反序列化消息:嘗試反序列化參數http://tempuri.org/:foc時發生錯誤。 InnerException消息是'使用類型'Business.App.ObjectChangeTracker'作爲只能收集不受NetDataContractSerializer支持。考慮使用CollectionDataContractAttribute屬性或SerializableAttribute屬性標記類型,或者將屬性添加到setter。'。有關更多詳細信息,請參閱InnerException。

我對服務聲明沒有什麼特別之處;只是正常的ServiceContract和OperationContract屬性。

[ServiceContract] 
public interface ILSRPipelineServiceEndPoint 
{ 
    [OperationContract] 
    LSRRequestTypeMapping[] GetRequestTypeMappings(); 

    [OperationContract] 
    LSRResponseTypeMapping[] GetResponseTypeMappings(); 

    [OperationContract] 
    ServiceResult<FOCResponse> ValidateFOC(FOCResponse foc); 

    [OperationContract] 
    ServiceResult<FOCResponse> SendFOC(FOCResponse foc); 

    [OperationContract] 
    ref_SourceType GetGatewaySourceType(); 
} 

所有顯示都標有對象的[DataContract(IsReference =真)]

任何想法,我做錯了,或者我能做些什麼來解決這個問題?謝謝你,一切!

+0

錯誤客戶端或服務器端? – saille

+0

它是服務器端。 SendFOC方法工作正常,直到我添加了返回類型(它以前是void),所以這絕對是問題的根源。我只是不知道如何解決它。 –

+1

我改變了ValidateFOC和SendFOC方法的返回類型,不在返回對象圖中包含任何對象,也沒有使用泛型的任何對象。新的返回類型只是一個單一的bool字段和一個字符串數組字段。我仍然得到這個錯誤。 D'哦!令人沮喪! –

回答

0

我最終改變使用視圖模型POCO的,而不是試圖穿過原始對象與他們的狀態跟蹤部件發送。謝謝,所有!學過的知識。

1

我認爲問題在於您使用NetDataContractSerializer而不是DataContractSerializer。從我讀過的內容來看,只有DataContractSerializer支持自我跟蹤實體。

看到這個頁面:MSDN thread