#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 закончил его использовать.