Отлов необработанных исключений в веб-элементе управления, чтобы страница могла отображаться - PullRequest
0 голосов
/ 02 ноября 2010

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

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

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

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

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

  • Я пропустил какие-либо другие варианты?
  • Можно ли использовать в этом отношении универсальный Try-Catch?


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

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

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

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

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

0 голосов
/ 03 ноября 2010

Я нашел то, что я после- Перехват необработанных исключений в ASP.NET UserControls

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

...