請原諒,如果這是一個重複的問題 - 我已經搜索,但沒有找到任何解釋我的問題。查詢使用LINQ到對象時出現WCF錯誤
我創建了一個ASP.NET網站。我有3層 - 數據訪問,業務,演示。我在整個使用實體框架時使用共享實體。
- 介紹:UI
- 業務:WCF服務
- 數據訪問:代碼連接到數據庫(包含EF情況下,連接字符串)
- 實體:的.edmx - EF實體。這些在所有3層共享。
我在WCF服務中遇到了一些奇怪的行爲,我無法理解。我原來的代碼在DAL中有一個函數,它查詢所有客戶的數據庫,並返回一個List。該服務比根據UI請求的內容進一步查詢該列表並向列表層返回列表。
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;
}
當我調試的代碼,eveything工作得很好,但是當該服務試圖將CUSTLIST返回給客戶端,我得到這個錯誤:接收到對localhost/WCF/MyService的HTTP響應時發生錯誤。這可能是由於服務端點綁定不使用HTTP協議。這也可能是由於HTTP請求上下文被服務器中止(可能是由於服務關閉)。查看服務器日誌獲取更多詳細信
我改變了我的DAL到inclued整個查詢,我的WCF服務到這:
public List<customer> GetCustomersByState(string state)
{
contextManager contextDAL = new contextManager();
List<Customer> custList = contextDAL.GetCustomers(state)
return custList;
}
這工作得很好。我也試圖把整個查詢放在服務中(服務直接連接到上下文並獲得列表),並且工作得很好。所以基本上,我的問題是,爲什麼WCF服務不能返回使用Linq查詢對象的objetcs列表(DAL返回客戶列表,因此所有進一步查詢都是linq到對象)。它使用Linq to Entities(使用服務中的所有代碼)正常工作,並且工作正常,根本不需要查詢 - 只需獲取列表並將其返回即可。
對於冗長的帖子,我很抱歉,我試圖包括所有必要的細節......謝謝!
您的DAL方法包含兩個其他對象 - 當您的原始WCF調用將客戶信息從該集合中取出時,它也將數據帶入相關對象中。這與WCF無關,順便說一下(超出了可調整的大小限制) - 根本原因是LINQ查詢。 – Tim
這是有道理的。那麼,如何修復我的查詢以使其以原始方式工作?我需要與客戶一起傳遞的'包括'表。 – ploni
您必須增加綁定的大小限制。如果你發佈你的配置文件(服務和客戶端),我可以告訴你如何去做,如果你不知道如何做。 – Tim