Возврат Null из вызова метода

#wcf

#wcf

Вопрос:

Хорошо, позвольте мне сначала изложить некоторые факты:

  1. Это веб-служба, которая работает. Существует несколько конечных точек .svc, все из которых работали. Прямо сейчас, хотя есть один, которого нет, это означает, что я могу вызывать к нему методы, когда я использую сервис через другой проект, но в результате я продолжаю получать null обратно.
  2. Код для методов в этой службе, которая постоянно отправляет обратно null, НЕ ИЗМЕНИЛСЯ
  3. Я действительно возился с конфигурацией конечной точки, указывая ее на пару разных серверов. Я попробовал исходный сервер, на который он также был указан. Независимо от того, что я могу нормально обновить службу, но даже если я верну ее к старому пути конечной точки, я все равно получаю null обратно из своих модульных тестов при тестировании вызовов этой службы. Модульные тесты выполняются в проекте, который, конечно, использует сервис
  4. Я проверил app.config и web.config для самой службы. Насколько я вижу, все выглядит нормально…но опять же, я новичок в WCF

Я знаю, что это довольно общее, но я ищу некоторые рекомендации о том, с чего начать поиск, чтобы понять, почему я внезапно получаю null обратно. Сохраненная процедура, лежащая в основе этих методов, не изменилась. Опять же, эти вызовы методов работали в какой-то момент времени на прошлой неделе, но сейчас это не так.

Ответ №1:

Это очень общее, но есть несколько вещей, которые нужно попробовать…

  1. Попробуйте обновить ссылку на службу, чтобы убедиться, что у вас самая последняя версия ваших прокси-объектов
  2. Вы пробовали отлаживать внутри своей службы и проверяли, возвращается ли ожидаемое возвращаемое значение из службы до того, как клиент его получит?
  3. Вы перехватываете все исключения в службе, а затем возвращаете результирующий объект, или вы позволяете исключениям проходить? Если вы позволите им провалиться, канал WCF может быть поврежден.
  4. Попробуйте использовать Fiddler и посмотрите, являются ли конечные точки, которые, по вашему мнению, должны вызываться, и действительно ли объект ответа равен null.
  5. Используйте старый школьный трюк и запишите результат в файл на сервере непосредственно перед возвращением к клиенту. Это поможет вам узнать, является ли это проблемой сериализации между сервером и клиентом. Возможно, вам даже потребуется выполнить запись в файл сразу после получения вызова службой, чтобы убедиться, что ваш клиент подключается.

Что вам действительно нужно сделать, так это начать с отладки внутри вашего сервиса и пошагового выполнения кода там. Убедитесь, что SPROC возвращает то, что вы ожидаете, и тогда не будет введена ошибка среды.

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

1. # 2 У меня есть модульные тесты, которые уже были внутри фактического сервисного решения, и теперь они терпят неудачу. Ранее они не терпели неудачу. Они терпят неудачу, когда null возвращается из модульного теста при вызовах метода для этой службы.

2. # 3 Я новичок в этой команде, но они отправляют обратно пользовательский объект status out для отправки статуса вызова…

3. # 4 хорошая идея, позвольте мне попробовать. Мне также сказали попробовать тестовый клиент WCF, чтобы сделать что-то подобное … и для тестирования вызовов?

4. Да, тестовый клиент WCF тоже будет работать. Это приведет к удалению вашей клиентской переменной. Интересно, не может ли клиент для начала подключиться к серверу. Как вы устанавливаете адрес конечной точки? Вы ссылаетесь на переменную name в XML-файле приложения или программно устанавливаете адрес конечной точки?

5. Кроме того, просто подход старой школы, запишите результат в файл на сервере, прежде чем возвращаться к клиенту. Это определенно скажет вам, является ли это проблемой сериализации между сервером и клиентом или чем-то еще.

Ответ №2:

Когда у вас возникают странные проблемы с WCF, первое, что нужно сделать, это настроить трассировку WCF. Это очень мощный инструмент. Вы даже можете видеть содержимое сообщений.

Вот официальный документ по этому вопросу: настройка трассировки WCF

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

1. Да, я сделал это некоторое время назад, но это не сильно помогло в решении этой проблемы.