#c# #asp.net #wcf #asp.net-web-api
#c# #asp.net #wcf #asp.net-web-api
Вопрос:
Я создаю службу веб-api WCF. Моя проблема в том, что некоторые методы возвращают ответ 200 / OK, но заголовки и тело пусты.
При настройке моей веб-службы я создал ADO.NET Модель данных сущности. Я выбрал ADO.NET Генератор DbContext, когда я добавил элемент генерации кода. В Model.tt документ, я изменил HashSet и ICollection на List. Я создал свой веб-сайт.
Раньше, когда я кодировал метод для возврата списка объектов (например List<Customer>
, или List<Employee>
в базе данных Northwind), он работал нормально. Со временем я не смог вернуть список ни одного из них и смог захватить только один объект. Теперь дошло до того, что я могу вернуть List<string>
или List<int>
, но не список или экземпляр какой-либо сущности. Когда я пытаюсь получить a List<AnyEntity>
, ответ равен 200 / OK, но заголовки и тело ответа пусты.
Я попытался использовать отладчик и веб-консоль Firefox. Используя WC FF, я мог получить только «неопределенный» код состояния. Я не уверен, куда идти дальше.
РЕДАКТИРОВАТЬ: пытаясь захватить все области из базы данных, я делаю это:
[WebGet(UriTemplate = "areas")]
public List<a1Areas> AllAreas()
{
return context.a1Areas.ToList();
}
Я был бы признателен за любые другие методы для отладки этого. Заранее благодарю.
Нашел ответ, спасибо Мерлину!
В моем файле Global.asax я забыл закомментировать две строки, которые обрабатывали прокси и удаляли мой контекстный объект. Код приведен ниже:
void Application_BeginRequest(object sender, EventArgs e)
{
var context = new AssignmentEntities();
context.Configuration.ProxyCreationEnabled = false;
HttpContext.Current.Items["_context"] = context;
}
void Application_EndRequest(object sender, EventArgs e)
{
var context = HttpContext.Current.Items["_context"] as AssignmentEntities;
if (context != null)
{
context.Dispose();
}
}
Комментарии:
1. Возвращаете ли вы объекты непосредственно клиенту? Это может работать не так, как вы надеялись, из-за прокси-серверов объектов / отложенной загрузки. Можете ли вы предоставить какой-нибудь код для своих методов обслуживания? Кроме того, Fiddler — хороший инструмент для отладки запросов. Также может быть полезно извлечь оттуда данные запроса и ответа и вставить их в вопрос.
2. Спасибо за информацию! 🙂 Как создается / удаляется ваш контекст?
3. Привет! Да, я возвращаю объекты непосредственно клиенту. Что касается использования Fiddler, ответ был следующим: HTTP / 1.1 504 Fiddler — сбой приема Тип содержимого: текст / html; кодировка = UTF-8 Соединение: закрыть Временная метка: 22:49:24.129 Сбой ReadResponse(): сервер не вернул ответ на этот запрос.
4. Спасибо за совет о прокси! Я взглянул на свой глобальный файл.asax, в котором я создал свой контекст. Я забыл прокомментировать пару строк: context.Configuration. ProxyCreationEnabled = false; и context.Dispose(). Я добавлю код, чтобы ответить на свой собственный вопрос, на случай, если у кого-нибудь возникнут проблемы с этим позже. Еще раз большое вам спасибо!
5. Никаких проблем! Не стесняйтесь публиковать реальный ответ на свой собственный вопрос и принимать его. Здесь это принято и поощряется.