обрабатывать глобальные ошибки asmx - PullRequest
0 голосов
/ 10 января 2012

У меня есть класс, который реализует службу asmx.

class AsmxService{
public string Method(int i){.....}
....}

Я опускаю некоторые атрибуты, но могу предоставить полный код, если вы сочтете это необходимым.

Если я получаю исключение в функцию Method, это не проблема: просто используйте try-catch. Но что нам делать, если произошла ошибка за пределами функции. Например, клиент передал недопустимый параметр int или что-то еще. В этом случае на стороне клиента я получаю сообщение об исключении. Но я бы хотел скрыть все детали ошибки и всегда возвращать простое уведомление, например следующее: «Произошла ошибка. Невозможно обработать запрос».

Я попытался написать модуль расширения SOAP, но обнаружил, что он не перехватывает исключение, связанное с asmx.

Так возможно ли вообще, и если ответ «да», что я должен делать?

Кажется, что эта проблема время от времени возникала в стеке, но я не смог найти решение.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Вы ничего не можете сделать с ошибками, отправленными обратно инфраструктурой веб-службы. Если бы вы использовали WCF, у вас был бы почти полный контроль, но вы ничего не можете с этим сделать, используя ASMX.

0 голосов
/ 10 января 2012

Я не знаю, что вы уже видели в отношении модулей расширения SOAP, но вот хороший пример одного (он начинается в середине статьи). Надеюсь, это поможет.

UPDATE

Если я вас правильно понимаю, вы не спрашиваете о перехвате исключений, которые выбрасываются в код вашего обслуживания (я полагаю, что вы уже обрабатываете их к своему удовлетворению). Вместо этого вы пытаетесь перехватить ошибки в коммуникационном стеке ASP.NET, т.е.

  • Сериализация объектов на стороне клиента в сообщении запроса
  • Передача сообщения запроса на сервер
  • десериализация сообщения запроса в объекты на стороне сервера
  • ... и наоборот для ответа

Если это так, то на вашем месте я бы просто оставил все как есть и позволил ASP.NET генерировать любые исключения, которые он хочет. Я говорю это, потому что ...

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

Однако, по моему мнению, перехват исключений, которые вызываются из стека связи, не добавляет ценности. Злоумышленник не собирается ничего узнавать о вашем коде, когда ему говорят, например, что «поле X ожидалось xs:int, но было пропущено xs:dateTime». Он уже знает это, изучая WSDL.

...