2012-04-11 6 views
0

Zuerst rief ich eine Funktion in meinem Webservice von meinem Controller an und paginierte als nächstes das Ergebnis, um nur 10 Elemente in meiner Ansicht anzuzeigen. Ich ging wie folgt aus:Nachricht 'Die zugrunde liegende Verbindung wurde geschlossen' beim Aufruf einer WCF-Funktion

Controller:

public ActionResult Index(int? page) 
    { 
     var companies = _requestServiceClient.GetCompanies(); 
     int currentPageIndex = page.HasValue ? page.Value - 1 : 0; 
     var companiesListPaged = companies.ToPagedList(currentPageIndex, defaultPageSize); 
     return View(companiesListPaged); 
    } 

Service:

public IEnumerable<Company> GetCompanies() 
    { 
     using (var unitOfWork = UnitOfWorkFactory.Create()) 
     { 
      var companyRepository = unitOfWork.Create<Company>(); 
      return companyRepository.GetAll().MyInclude(x => x.City).ToList(); 
     } 
    } 

So ist die Paginierung getan wurde, nachdem alle Daten von meinem Dienst abgerufen wurde. Es funktioniert, aber viele Daten wurden übertragen, also nicht sehr effizient. Ich änderte meinen Code die Paginierung Arbeit direkt in den Dienst wie dies zu tun:

Controller:

[Authorize] 
    public ActionResult Index(int? page) 
    { 
     int currentPageIndex = page.HasValue ? page.Value - 1 : 0; 
     var companies = _requestServiceClient.GetCompaniesToPagedList(currentPageIndex, defaultPageSize); 
     return View(companies); 
    } 

Service:

public IPagedList<Company> GetCompaniesToPagedList(int PageIndex, int PageSize) 
    { 
     using (var unitOfWork = UnitOfWorkFactory.Create()) 
     { 
      var companyRepository = unitOfWork.Create<Company>(); 
      var companies = companyRepository.GetAll().MyInclude(x => x.City).ToList(); 
      return companies.ToPagedList(PageIndex, PageSize); 
     } 
    } 

Es kompiliert aber zur Laufzeit bekam ich den Fehler:

Die zugrunde liegende Verbindung wurde geschlossen: Eine Verbindung, von der erwartet wurde, dass sie am Leben gehalten wurde, wurde vom Server geschlossen.

Irgendeine Idee? Warum gibt mir diese Änderung in meinem Code diesen Fehler?

Ich habe nichts anderes geändert.

Danke.


UPDATE

Und hier ist der Code für die IPagedList

public interface IPagedList<T> : IList<T> 
{ 
    int PageCount { get; } 
    int TotalItemCount { get; } 
    int PageIndex { get; } 
    int PageNumber { get; } 
    int PageSize { get; } 
    bool HasPreviousPage { get; } 
    bool HasNextPage { get; } 
    bool IsFirstPage { get; } 
    bool IsLastPage { get; } 
} 

Und für ToPagedList

public static IPagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize, int? totalCount = null) 
    { 
     return new PagedList<T>(source, pageIndex, pageSize, totalCount); 
    } 

Antwort

0

würde ich vorschlagen, die Überprüfung, ob die Menge der zurückgegebenen Daten durch Der Anruf kann die im ReaderQuo definierten Grenzwerte überschreiten Tas-Element Ihrer Bindung.

+0

Ich gebe nur 10 Artikel zurück >> Ich habe solche Probleme nicht. Danke trotzdem. Ich denke, das Problem ist, dass meine Paginierung nicht serialisierbar ist, aber ich weiß nicht, wie ich mich anpassen soll. Danke trotzdem. – Bronzato

Verwandte Themen