如果这是一个重复的问题,请原谅 - 我已经搜索但没有找到任何可以解释我的问题的东西。
我创建了一个 ASP.NET 网站。我有 3 层 - 数据访问、业务、演示。我在整个使用实体框架的过程中都使用了共享实体。
- 演示:用户界面
- 业务:WCF服务
- 数据访问:连接数据库的代码(包含 EF 上下文、连接字符串)
- 实体:.edmx - EF 实体。这些在所有 3 层中共享。
我在 WCF 服务中遇到了一些我无法理解的奇怪行为。我的原始代码在 DAL 中有一个函数,它为所有客户查询数据库,并返回一个列表。该服务然后根据 UI 请求的内容进一步查询此列表,并将列表返回给表示层。
达尔:
public List<Customer> GetCustomers()
{
List<Customer> custList= new List<Customer>();
try
{
using (NorthWindsEntities context = new NorthWindsEntities(connectionString))
{
custList= context.Customers
.Include("Orders")
.Include("OrderDetails")
.ToList();
}
return custList;
}
catch (Exception ex)
{
//handle exception
return custList;
}
}
周转基金:
public List<Customer> GetCustomersByState(string state)
{
contextManager contextDAL = new contextManager();
List<Customer> custList = contextDAL.GetCustomers()
.Where(c => c.State == state)
.ToList();
return custList;
}
当我调试代码时,一切工作正常,但是当服务尝试将 custList 返回给客户端时,我收到此错误:接收对 localhost/WCF/MyService 的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。
我将我的 DAL 更改为包含整个查询和我的 WCF 服务:
public List<customer> GetCustomersByState(string state)
{
contextManager contextDAL = new contextManager();
List<Customer> custList = contextDAL.GetCustomers(state)
return custList;
}
这工作得很好。我还尝试将整个查询放在服务中(服务直接连接到上下文并获取列表)并且效果也很好。
所以基本上,我的问题是,为什么 WCF 服务不能返回使用 Linq to Objects 查询的对象列表(DAL 返回客户列表,所以所有进一步的查询都是 linq to objects)。使用 Linq to Entities(包含服务中的所有代码)可以正常工作,并且完全无需查询即可正常工作 - 只需获取一个列表并返回它。
很抱歉这篇冗长的帖子,我试图包括所有必要的细节......谢谢!