无法传输列表:基础连接已关闭

时间:2013-12-19 16:06:35

标签: c# .net wcf entity-framework webclient

我在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
}

我该怎么办?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我解决了这个问题。 DB中的信息不喜欢枚举,因此将其更改为枚举中的数字。不是代码问题。