2011-02-03 103 views
8

我創建了一個WCF服務,返回IEnumerable<CyberResourceProvisioningAction>WCF - 使用DataMember修飾IEnumerable <T>導致異常:底層連接已關閉:連接意外關閉

Cyber​​ResourceProvisioningAction類型具有AccountInformation IEnumerable<CyberResourceProvisioningActionAccountInfo>的屬性。當我裝點DataMemberAttribute的AccountInformation財產我收到異常:

WCF System.Net.WebException:本 基礎連接已關閉: 連接被意外關閉

顯然是一個非常通用的異常,但是我的Google-fu表明這個問題在集合中返回大量對象時最常出現。建議的修復方法是設置<dataContractSerializer maxItemsInObjectGraph="2147483646"/>。不幸的是,這並沒有解決我的問題。 (沒想到會因爲我返回少量的數據)。

屬性設置正確,所以我很確定我的問題與我的序列化配置有關。我的類有什麼問題導致WCF服務出現這種錯誤?

[DataContract] 
public class CyberResourceProvisioningAction 
{ 
    [DataMember] 
    public string Action { get; set; } 

    [DataMember] 
    public DateTime RcdChgDateTime { get; set; } 

    [DataMember] 
    public string CyberResourceName { get; set; } 

    [DataMember] 
    public IEnumerable<CyberResourceProvisioningActionAccountInfo> AccountInformation 
    { get; set; } 
} 

Cyber​​ResourceProvisioningActionAccountInfo

[DataContract] 
public class CyberResourceProvisioningActionAccountInfo 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public string Value { get; set; } 
} 

如果需要額外的配置信息,讓我知道,我將修改後。

+2

如果您啓用了幫助頁面,請瀏覽該頁面以查看是否收到激活例外;否則附加一個調試器並捕獲異常。這聽起來可能是DataContract編程模型違規。 – alexdej 2011-02-03 20:44:29

+0

@alexdej我附加了一個調試器,但從不捕獲任何異常。 WCF Test Client中出現異常,但不是我的調試器。 – ahsteele 2011-02-03 21:02:55

回答

14

由於alexdej左邊留下的關於「DataContract編程模型違規」的評論,我開始更加關注我的屬性。我在屬性中有一個Linq類型,雖然它是一個IEnumerable,但它並沒有被列舉爲序列化。增加了一個.ToList(),一切都很好。

相關問題