Возврат IList в качестве REST API с использованием Linq

#linq #rest #entity

#linq #rest #сущность

Вопрос:

Я работаю с REST (используя WCF) последние 2 года, но новичок в Entity Model amp; Linq, однако использовал NHibernate.

Я создал простой сервис с помощью folloiwng :-

NorthwindModel [Модель данных, содержащая таблицы Product, Order и Order_Detail] ProductService, предоставляемая как REST с определенной конфигурацией (без использования WebServiceHostFactory)

Контракт на обслуживание :-

 [ServiceContract]
public interface IProductService
{
    [OperationContract]
    [WebGet(
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped)
    ]
    IList<Product> GetProducts();
}
  

Реализация сервиса :-

 public class ProductService : IProductService
{
    #region IProductService Members

    public IList<Product> GetProducts()
    {
        IList<Product> prodList = new List<Product>();
        NorthwindEntities ne = new NorthwindEntities();
        var query = from category in ne.Products select category;
        prodList = query.ToList<Product>();
        return prodList;
    }

    #endregion

}
  

Тег службы :-

 <services>
  <service name="HellooData.ProductService" behaviorConfiguration="wcfJSONBehavior">
    <endpoint address="" behaviorConfiguration="REST" binding="webHttpBinding"
              contract="HellooData.IProductService" bindingConfiguration="RESTBINDING">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="webHttpBinding" contract="IMetadataExchange" bindingConfiguration="RESTBINDING" />
  </service>
</services>
  

Привязка : —

  <webHttpBinding>
    <binding name="RESTBINDING" maxReceivedMessageSize="2147483647"  >
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
  

После попытки вызвать службу из браузера я получаю «Ошибка 324 (net::ERR_EMPTY_RESPONSE): сервер закрыл соединение без отправки каких-либо данных» ошибка в Chrome и пустая страница в Mozilla.

Попытался выполнить отладку, но данные извлекаются правильно (77 записей) и возвращаются без каких-либо исключений. Я почему-то сомневаюсь в конфигурации или размере данных, но не уверен. Я пытался изменить результирующий набор (только 2 вместо 77), результат был все тем же.

Может кто-нибудь указать, что происходит не так?

Комментарии:

1. Используйте Fiddler, чтобы проверить, переданы ли ваши данные или нет. Используете ли вы отложенную загрузку?

2. Я сделал следующее:- 1) Проверил ответ с помощью строковых данных, и это работает! 2) Изменил ответ на null, и он работает! 3) Выдал пустой ответ, и он не работает! 4) Сохранена только одна запись вместо стандартных 77, по-прежнему не работает. 5) Создал службу передачи данных (которая использует DataFactory) и связана с EDM, и, на удивление, это работает. Я почему-то сомневаюсь в типе данных свойств в классе Product, но не уверен.

3. Используете ли вы отложенную загрузку?

Ответ №1:

У меня была именно эта проблема; в моем случае я удалял контекст базы данных до того, как мой контроллер SQL закончил его использовать.