EF与WCF:底层连接已关闭:连接意外关闭

时间:2012-05-07 07:01:01

标签: c# wcf asp.net-mvc-3 exception-handling entity-framework-4.1

当我通过WCF从ASP.NET MVC检索所有订单及其OrderDetails时,它会抛出错误。直到服务它工作正常,只有当调用在这种情况下停止服务MVC时,它才会抛出错误:

  

基础连接已关闭:连接意外关闭。

  1. 我没有使用延迟加载

  2. 我想使用相同的POCO类,不希望在WCF中单独创建DataContract。

  3. 我的代码:

    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; }
    }
    

3 个答案:

答案 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属性,如下所示 -

http://msdn.microsoft.com/en-us/library/e1f13641.aspx

答案 2 :(得分:0)

结果消息可能太大而无法根据默认限制发送回客户端。

您可以使用WCF跟踪日志找出问题所在。请参阅this链接。