【问题标题】:EF with WCF: The underlying connection was closed: The connection was closed unexpectedlyEF 与 WCF:基础连接已关闭:连接意外关闭
【发布时间】:2012-05-07 07:01:01
【问题描述】:

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

底层连接已关闭:连接意外关闭。

  1. 我没有使用延迟加载

  2. 我想使用同一个 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; }
}

【问题讨论】:

  • 您的 Order_Detail POCO 上是否有一个名为 Order 的导航属性?如果是这样,您可以将其删除一会儿再试一次吗?我认为 WCF 使用的 Json 序列化器无法处理循环引用。
  • 不,我在 order_detail 实体中没有订单属性。更新了上面的代码块。请参考
  • 您能否发布您的 NorthwindEntities 配置? Configuration.ProxyCreationEnabled 是否等于 true?
  • Alex,默认情况下 proxycreationenabed 为真,禁用后它工作正常。感谢 public List GetAllOrders() { List orders = null;使用 (NorthwindEntities context = new NorthwindEntities()) { context.Configuration.ProxyCreationEnabled = false; orders = context.Set().Include("Order_Details").AsEnumerable().ToList(); context.Configuration.ProxyCreationEnabled = true; } 退货单; }

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


【解决方案1】:

感谢亚历克斯,

它在禁用 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;
    }

【讨论】:

    【解决方案2】:

    这可能是超时问题。猜测一下,尝试在 httpRuntime 元素中设置 executionTimeout 属性,如下所示 -

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

    【讨论】:

    • 给定最大超时持续时间。但它仍然抛出。 db 没有大量数据。 ef 数据加载很快完成。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多