使用LINQ to Objects进行查询时出现WCF错误

本文关键字:WCF 错误 查询 LINQ to Objects 使用 | 更新日期: 2023-09-27 18:22:26

如果这是一个重复的问题,请原谅——我已经搜索过了,但没有找到任何解释我问题的东西。

我创建了一个ASP.NET网站。我有三层——数据访问、业务、演示。我在使用实体框架的整个过程中使用了共享实体。

  • 演示文稿:UI
  • 业务:WCF服务
  • 数据访问:连接到DB的代码(包含EF上下文、连接字符串)
  • 实体:.edmx-EF实体。这些在所有3层中都是共享的

我在WCF服务中遇到了一些我无法理解的奇怪行为。我最初的代码在DAL中有一个函数,它为所有客户查询数据库,并返回一个List。该服务根据UI的请求进一步查询了该列表,并向Presentation Layer返回了一个列表。

DAL:

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

WCF:

 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/WWC/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(使用服务中的所有代码)可以很好地工作,而且完全不需要查询,只需要获取列表并返回即可。

我很抱歉发了这么长的帖子,我试图包括所有必要的细节。。。谢谢

使用LINQ to Objects进行查询时出现WCF错误

经过多次尝试和错误,我发现这不是一个查询问题,而是一个大小问题。尽管WCF服务过滤了我的数据,只返回了一些记录,但我想它保留了对其余数据的某种引用,因为它错误地处理了太多数据。如果我在DAL上进行部分筛选,然后继续在WCF层上进行筛选,得到与我最初试图返回的记录数量相同的记录,它会毫无问题地返回列表。

我无法解释为什么会发生这种情况,我对WCF了解不多,只是解释了我做了什么来避免其他人出现这种问题。