Повторное использование моего объекта PagedList в WCF - PullRequest
2 голосов
/ 06 января 2011

Проблема:

У меня есть пользовательская коллекция PagedList<T>, которая возвращается из моей службы WCF как PagedListOfEntitySearchResultW_SH0Zpu5, когда T является объектом EntitySearchResult.

Я хочу использовать это PagedList<T> введите между приложением и службой.

Мой сценарий:

Я создал тип PagedList<T>, который наследуется от List<T>.Этот тип находится в отдельной сборке, на которую ссылаются как приложение, так и служба WCF.

Я использую параметр / reference в scvutil, чтобы включить повторное использование типа.Я также не хочу, чтобы возвращались какие-либо массивы, поэтому я также использую /collection для сопоставления с универсальным типом List.Я использую следующую команду svcutil для генерации прокси службы:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\svcutil.exe" 
/collectionType:System.Collections.Generic.List`1 
/reference:..\..\bin\Debug\App.Utilities.dll 
http://localhost/App.MyService/MyService.svc?wsdl  
/namespace:*,"App.ServiceReferences.MyService" 
/out:..\ServiceProxy\MyService.cs

Объект PagedList выглядит примерно так:

 [CollectionDataContract]
 public partial class PagedList<T> : List<T>
 {

  public PagedList() { }

  /// <summary>
  /// Creates a new instance of the PagedList object and doesn't apply any pagination algorithm.
  /// The only calculated property is the TotalPages, everything else needed must be passed to the object.
  /// </summary>
  /// <param name="source"></param>
  /// <param name="pageNumber"></param>
  /// <param name="pageSize"></param>
  /// <param name="totalRecords"></param>
  public PagedList(IEnumerable<T> source, int pageNumber, int pageSize, int totalRecords)
  {
   if (source == null)
    source = new List<T>();

   this.AddRange(source);

   PagingInfo.PageNumber = pageNumber;
   PageSize = pageSize;
   TotalRecords = totalRecords;
  }

  public PagedList(IEnumerable<T> source, PagingInfo paging)
  {
   this.AddRange(source);
   this._pagingInfo = paging;
  }

  [DataMember]
  public int TotalRecords { get; set; }

  [DataMember]
  public int PageSize { get; set; }

  public int TotalPages()
  {
   if (this.TotalRecords > 0 && PageSize > 0)
    return (int)Math.Ceiling((double)TotalRecords / (double)PageSize);
   else
    return 0;
  }

  public bool? HasPreviousPage() 
  { 
   return (PagingInfo.PageNumber > 1); 
  }

  public bool? HasNextPage() { return (PagingInfo.PageNumber < TotalPages()); }

  public bool? IsFirstPage() { return PagingInfo.PageNumber == 1; }

  public bool? IsLastPage() { return PagingInfo.PageNumber == TotalPages(); }

  PagingInfo _pagingInfo = null;
  [DataMember]
  public PagingInfo PagingInfo
  {
   get {
    if (_pagingInfo == null)
     _pagingInfo = new PagingInfo();

    return _pagingInfo;
   }
   set 
   { 
    _pagingInfo = value;
   }
  }
 }

1 Ответ

1 голос
/ 06 января 2011

Мне кажется, я знаю, что здесь происходит ...
/collection конфликтует с /reference в этом случае, поскольку мой объект PagedList наследуется от List<T>. Я просто изменил / collection на следующий, и теперь он работает.

/collectionType:App.Utilities.Data.PagedList`1

Дело в том, что все мои коллекции будут извлечены как PagedList.
Это на самом деле не проблема для меня, но может потребоваться возможность получить List<T> по умолчанию и PagedList<T> при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...