【发布时间】:2012-05-07 07:01:01
【问题描述】:
当我通过 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; }
}
【问题讨论】:
-
您的 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