2013-12-19 3 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

Я исправил проблему. Информация в БД не похожа на перечисление, поэтому его изменение на числа, как в переписке, фиксировало его. а не проблема с кодом.

0

Попробуйте добавить:

context.Configuration.LazyLoadingEnabled = false; 

после

using (var context = new FieldBookEntities()) 
{ 

Кроме того, изменить следующим образом:

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

To:

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

Смежные вопросы