У меня есть приложение Silverlight 2, которое использует службу WCF. Таким образом, он использует асинхронные обратные вызовы для всех вызовов методов службы. Если служба не запущена или сбой, или сеть опускается, и т.д. До или во время одного из этих вызовов, генерируется исключение, как и следовало ожидать. Проблема в том, что я не знаю, как поймать это исключение.
-
Поскольку это асинхронный вызов, я не могу завершить мой начальный вызов блоком try/catch и получить его исключение, которое происходит после того, как программа переместилась с этой точки.
-
Поскольку прокси-сервер службы автоматически генерируется, я не могу поместить блок try/catch для каждой генерируемой функции, которая вызывает EndInvoke (где действительно появляется исключение). Эти сгенерированные функции также окружены внешним кодом в стеке вызовов, поэтому нигде в стеке не нужно ставить try/catch.
-
Я не могу поместить try/catch в мои функции обратного вызова, потому что это исключение происходит до того, как они будут вызваны.
-
В моем приложении App.xaml.cs есть функция Application_UnhandledException, которая фиксирует все необработанные исключения. Я мог бы использовать это, но это похоже на грязный способ сделать это. Я бы предпочел зарезервировать эту функцию для поистине неожиданных ошибок (ака ошибок) и не в конечном итоге с кодом в этой функции для каждого обстоятельства, с которым я хотел бы заниматься определенным образом.
Я пропустил очевидное решение? Или я придерживаюсь с помощью Application_UnhandledException?
[Изменить]
Как уже упоминалось ниже, свойство Error - это именно то, что я искал. То, что бросает меня за цикл, состоит в том, что тот факт, что исключение выбрано и кажется неотображенным, но исполнение может продолжаться. Он запускает событие Application_UnhandledException и заставляет VS2008 прерывать выполнение, но продолжение в отладчике позволяет продолжить выполнение. Это не проблема, это кажется странным.