2013-12-19 55 views
0

我在WCF服務中的對象內傳遞列表時遇到問題。我有這個類:無法傳輸列表:底層連接已關閉

[DataContract] 
public class Field 
{ 
    /*Necessary Information*/ 
    [DataMember] 
    public int ID { get; set; } 
    [DataMember] 
    public String Picture { get; set; } 
    [DataMember] 
    public double TypicalAge { get; set; } 
    [DataMember] 
    public List<Report> ReportHistory { get; set; } 
} 

[DataContract] 
public class Report 
{ 
    [DataMember] 
    public long ID { get; set; } 
    [DataMember] 
    public ReportTypes Type { get; set; } 
    [DataMember] 
    public int FieldID { get; set; } 
    [DataMember] 
    public String Head { get; set; } 
    [DataMember] 
    public String Body { get; set; } 
    [DataMember] 
    public DateTime TimeStamp { get; set; } 
} 

當報告列表爲空或1大小,一切正常。 當列表大小比1大,我得到這個錯誤:

The underlying connection was closed: The connection was closed unexpectedly..

在服務器中的代碼:

public List<Field> GetFieldsByIDs(List<int> listOfIDs) 
    { 
     var result = new List<Field>(); 
     using (var context = new FieldBookEntities()) 
     { 
      var fields = context.FieldEntities.Where(x => listOfIDs.Contains(x.ID)).Select(FieldEntityToField).ToList(); 
      for (int i = 0; i < listOfIDs.Count; i++) 
      { 
       var field = fields.FirstOrDefault(x => x.ID == listOfIDs.ElementAt(i)); 
       if (field != null) 
        result.Add(field); 
      } 
     } 



     return result; 
    } 

在客戶端的代碼:

client = new FieldServiceClient(); 
var fieldsByIDs = client.GetFieldsByIDs(new int[] { 1, 2 }); 

界面:

public interface IFieldService 
{ 

    [OperationContract] 
    bool CheckConnection(); 


    [OperationContract] 
    List<Field> GetFieldsByIDs(List<int> listOfIDs); //max 30 fields 
} 

我該怎麼辦?

+0

顯示錯誤代碼。 – Ric

+0

編輯我的問題 – BestArmy

+0

爲什麼你傳遞一個'int []'而不是'List ' – Ric

回答

0

我解決了這個問題。 DB中的信息不想在枚舉中,所以將其更改爲enum中的數字就可以修復它。不是代碼問題。

0

嘗試增加:

context.Configuration.LazyLoadingEnabled = false; 

using (var context = new FieldBookEntities()) 
{ 

另外,更改以下:

var fields = context.FieldEntities.Where(x => listOfIDs.Contains(x.ID)).Select(FieldEntityToField).ToList(); 

要:

var fields = context.FieldEntities.Include("ReportHistory").Where(x => listOfIDs.Contains(x.ID)).Select(FieldEntityToField).ToList(); 
+0

沒有工作!在我完成之後(context.ContextOptions.LazyLoadingEnabled = false;),上下文返回服務器中的空報表列表!所以無論如何,客戶得到一個空的列表,而刪除這條線有7個報告。嘗試通過這些報告給我上面的錯誤。 – BestArmy

+0

修改我的答案 - 這是排序嗎? –

+0

嗯,它修復了服務器中缺少的報告。 但仍然無法正常工作!當客戶端嘗試從函數獲取答案時,我仍然會收到錯誤消息。 – BestArmy

相關問題