Как лучше всего обрабатывать исключения в Silverlight?

В ASP.NET я обычно регистрирую исключения на стороне сервера. В формах Windows я могу либо регистрировать исключения на стороне сервера, либо записывать их в файл журнала на стороне клиента. Silverlight, кажется, подходит где-то посередине.

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

Ответов (5)

Решение

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

Я бы предложил использовать метод "LogEvent (..)" в веб-службе на стороне сервера (возможно, он у вас уже есть), который затем будет выполнять такую ​​же регистрацию, как и в ASP.net.

Вот видео о вызовах основных веб-служб в Silverlight, если вы еще этого не сделали http://silverlight.net/learn/learnvideo.aspx?video=66723

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

Надеюсь это поможет!

Я бы сказал, что Silverlight намного лучше подходит для ASP.NET части модели. У вас есть сервер, который обслуживает веб-страницу. Объект (приложение Silverlight) на странице проверяет связь со службой данных, чтобы получить данные и отобразить их.

Весь доступ к данным происходит на стороне сервера, и не имеет значения, используются ли данные для создания страниц ASP.NET на сервере или отправляются в необработанном виде в RIA для отображения. Я регистрирую любые сбои в службе данных на стороне сервера (журнал событий работает нормально) и не разрешаю передавать какие-либо исключения в WCF. Когда клиент не получает ожидаемых данных (он получает нулевую коллекцию или что-то подобное), он отображает общую ошибку доступа к данным для пользователя. Вскоре нам может потребоваться расширить это, чтобы передать немного больше информации (различие между отказом в доступе / отсутствием базы данных / отказом инфраструктуры / внутренней ошибкой и т. Д.), Но мы не планируем передавать клиенту сообщения об ошибках исключения.

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

Используйте изолированное хранилище, доступное для приложения Silverlight . Вы должны хранить здесь свой журнал.

Затем вы можете разработать механизм для отправки журнала пользователя в веб-сервис, например, в службу отчетов об ошибках Windows.

Это очень сильно зависит от типа приложения, которое вы разрабатываете.

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

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

Также ознакомьтесь с новым пакетом интеграции Silverlight для корпоративной библиотеки из шаблонов и практик Microsoft . Он обеспечивает поддержку регистрации исключений для изолированного хранилища или удаленных служб и настраивается с помощью политик во внешней конфигурации или программно. Также поддерживаются пакетное ведение журнала и автоматическая повторная попытка (в случае случайного подключения сценариев).