У меня есть две разные службы WCF, которые выполняют в основном ваши основные операции CRUD.Для обеих служб независимо от клиента, если служба выдает исключение , исключение не будет возвращено клиенту .Фактически, единственный способ увидеть фактическое исключение - это включить трассировку в сервисах и просмотреть файл трассировки.
Это верно независимо от того, было ли выброшено исключение.Например, если я отправлю строковое значение с длиной, превышающей длину, разрешенную конфигурацией привязки моей службы, он сгенерирует исключение NetDispatcherFaultException со следующим сообщением, как и ожидалось:
Форматер выдал исключение при попыткедля десериализации сообщения: при попытке десериализации параметра * 1007 произошла ошибка * Сообщение InnerException было «Произошла ошибка при десериализации объекта типа Organization.Division.Application.Service.AddNewItem. Превышена максимальная квота на длину содержимого строки (8192) при чтении данных XML .Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.Строка 1, позиция 20157. '.
Проблема заключается в том, что служба не возвращает это исключение; вместо этого служба генерирует исключение ArgumentNullException с сообщением об исключении:
Значение не может быть нулевым.Имя параметра: message
... и мой клиент просто выдает мне эту ошибку (это верно, является ли мой клиент веб-страницей ASP.NET, тестовым клиентом WCF или другими):
Не удалосьвызвать службу.Возможные причины: служба недоступна или недоступна;конфигурация на стороне клиента не соответствует прокси;существующий прокси-сервер недействителен.Обратитесь к трассировке стека для более подробной информации.Вы можете попытаться выполнить восстановление, запустив новый прокси-сервер, восстановив конфигурацию по умолчанию или обновив службу.Детали ошибки:Произошла ошибка при получении ответа HTTP на
http://localhost/Services/MyAwesomeS3rv1c3/DoSomethingGrrreat.svc. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP.Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы).Дополнительные сведения см. В журналах сервера.
Когда я просматриваю трассировку службы, я также вижу следующее предупреждение: Операция запроса / ответа AddNewItem не имеет ответного сообщения.
Я предполагаю, что я делаю что-то систематически неправильно, так как это происходит независимо от того, какое базовое исключение выдается, для нескольких служб и нескольких методов для каждой службы.Я просто не могу понять, в чем проблема.Я просто хочу, чтобы ошибка была возвращена клиенту.
Для дополнительной справочной информации у меня установлены следующие настройки в <serviceBehavior><behavior>...
в web.config службы:
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
...и я использую привязки wsHttpBinding и mex.
Наконец, это, кажется, довольно недавнее изменение в поведении (т. е. клиенты привыкли видеть фактические исключения, генерируемые сервисами).Я просто не могу понять, что могло измениться.