Перехват необработанных исключений в веб-элементе управления, чтобы разрешить отображение страницы

(На самом деле я использую Ektron CMS, и я использую Widgets, которое является очень простым расширением пользовательского элемента управления).

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

Например. У вас есть виджет погоды на каждой странице, который получает данные через веб-службу. Если веб-служба отправляет вам искаженный XML-код, вы хотите, чтобы сайт оставался доступным.

Возможные решения:
План A) Внутри каждого виджета заключите содержимое функции init или display в оператор Try-Catch.
План Б ) Создайте новый интерфейс IRobustWidget, расширяющий IWidget, и выполните в нем Try-Catch.

Оба эти варианта кажутся мне немного «грязными», поскольку я читал, что общие операторы catch (exception) являются чем-то вроде анти-шаблона. Я склоняюсь к плану Б, так как он кажется более модульным.

  • Пропустил ли я какие-то другие варианты?
  • Подходит ли в этом отношении универсальный Try-Catch?


(я также зарегистрировал это на форумах Ektron)


person Spongeboy    schedule 02.11.2010    source источник


Ответы (2)


Тот факт, что вы загружаете данные через веб-службу, заставляет меня задаться вопросом, следует ли вам загружать эти данные асинхронно, либо через ajax-загруженный <div>, или через <iframe>; т.е. виджет (ы) загружается (/ загружаются) отдельными запросами. Это дает вам два преимущества:

  • основная страница не задерживается вообще из-за получения данных - они должны загружаться на короткое время после того, как главная страница
  • если панель не загружается .... ну (при условии, что это неплохо, но не критично)

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

person Marc Gravell    schedule 02.11.2010
comment
Спасибо, я не подумал об этом. Это согласуется с моим решением повысить ответственность самих элементов управления за обработку ошибок. Я ухожу от попыток разрешить отображение страницы несмотря ни на что, поскольку на данном этапе нашего проекта это требует слишком больших усилий. - person Spongeboy; 03.11.2010

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

Я также понимаю, что мне нужно решить, на каком событии мне нужно сосредоточиться (Render, Load или настраиваемая функция SetDisplay).

person Spongeboy    schedule 03.11.2010