当我通过WCF从ASP.NET MVC检索所有订单及其OrderDetails时,它会抛出错误。直到服务它工作正常,只有当调用在这种情况下停止服务MVC时,它才会抛出错误:
基础连接已关闭:连接意外关闭。
我没有使用延迟加载
我想使用相同的POCO类,不希望在WCF中单独创建DataContract。
我的代码:
public class HomeController : Controller
{
public ActionResult Index()
{
ServiceReference1.Service1Client service = new ServiceReference1.Service1Client();
var allOrders = service.GetAllOrders();
service.Abort();
return View();
}
}
// WCF Service Method
public List<Order> GetAllOrders()
{
List<Order> orders = null;
using (NorthwindEntities context = new NorthwindEntities())
{
orders = context.Set<Order>().Include("Order_Details").AsEnumerable().ToList();
}
return orders;
}
public class Order
{
public Order()
{
this.Order_Details = new HashSet<Order_Detail>();
}
public virtual ICollection<Order_Detail> Order_Details { get; set; }
}
public class Order_Detail
{
public int OrderID { get; set; }
public int ProductID { get; set; }
public decimal UnitPrice { get; set; }
public short Quantity { get; set; }
public float Discount { get; set; }
}
答案 0 :(得分:6)
感谢Alex,
在禁用ProxyCreationEnabled后它可以工作。
public List<Order> GetAllOrders()
{
List<Order> orders = null;
using (NorthwindEntities context = new NorthwindEntities())
{
context.Configuration.ProxyCreationEnabled = false;
orders = context.Set<Order>().Include("Order_Details").AsEnumerable().ToList();
context.Configuration.ProxyCreationEnabled = true;
}
return orders;
}
答案 1 :(得分:0)
这可能是超时问题。猜测一下,尝试在httpRuntime元素中设置executionTimeout属性,如下所示 -
答案 2 :(得分:0)
结果消息可能太大而无法根据默认限制发送回客户端。
您可以使用WCF跟踪日志找出问题所在。请参阅this链接。