我在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 :(得分: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中的信息不喜欢枚举,因此将其更改为枚举中的数字。不是代码问题。