Веб-служба WCF: ответ равен 200 / ok, но тело ответа пустое

#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. Никаких проблем! Не стесняйтесь публиковать реальный ответ на свой собственный вопрос и принимать его. Здесь это принято и поощряется.