Я рву на себе волосы из-за этого, так что несите меня (это длинный пост).
IErrorHandler
и реализация IServiceBehavior
для перехвата исключений и предоставления ошибок, которые сериализуются в JSON Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда из моей службы WCF генерируется исключение, обработчик success вызова $. ajax
вызывает уволен. Ответ пуст, текст статуса - «Успех», а код ответа - 202 / Принято.
Реализация IErrorHandler
действительно используется, потому что я могу пройти через нее и наблюдать, как создается сообщение FaultMessage. В итоге происходит то, что обратный вызов success
вызывает ошибку, потому что текст ответа пуст, когда он ожидает строку JSON. Ошибка обратного вызова
никогда не срабатывает.
Одна вещь, которая дала небольшое понимание, - это удаление параметра enableWebScript
из поведения конечной точки. Когда я это сделал, произошли две вещи:
{d: "result"}
, только "result"
). ошибка
обратный вызов запущен, но ответ - это только HTML-код сообщения 400 / Bad Request, "желтый экран смерти" от IIS, а не моя сериализованная ошибка. Я пробовал столько всего, что отображается в 10 или более результатах поиска Google относительно случайных комбинаций ключевых слов "jquery ajax asp.net wcf faultcontract json", поэтому, если вы планируете поиск ответа в Google, не беспокойтесь. Я надеюсь, что кто-то в SO уже сталкивался с этой проблемой раньше.
В конечном итоге я хочу достичь:
в методе WCF FaultContact
ShipmentServiceErrorHandler
ShipmentServiceFault
(как JSON) клиенту. обратный вызов вызван, поэтому я могу обработать пункт 4.
Возможно связано с:
Обновление 1
Я изучил выходные данные трассировки активности System.ServiceModel, и в какой-то момент после вызова метода UpdateCountry выдается исключение , сообщение
Сервер возвратил недопустимую ошибку SOAP.
и все. Внутреннее исключение жалуется на то, что сериализатор ожидает другой корневой элемент, но я не могу расшифровать что-то еще.
Обновление 2
Итак, после некоторой возни у меня есть кое-что для работы, хотя и не так Считаю идеальным. Вот что я сделал:
из раздела поведения конечной точки файла web.config. FaultContract
из метода службы.
Заметки
Я заметил, что этот вопрос становится избранным. Я действительно нашел решение этой проблемы, и я надеюсь дать ответ, когда у меня будет время. Следите за обновлениями!