Представьте веб-службы с помощью метода, который возвращает объект клиента, который принимает идентификатор клиента в качестве параметра, т.е.Ловля исключения, брошенные в асинхронной веб-сервис завершенного обработчика событий
[WebMethod]
Customer GetCustomer(string customerId)
Теперь представьте себе, что вы написав приложение ASP.NET, и вы создали прокси для службы с асинхронными операциями. Вы создаете экземпляр службы, проводной сервис. GetCustomerCompleted для вашего обработчика, OnGetCustomerCompleted и вызова service.GetCustomerAsync («12345»).
В OnGetCustomerCompleted применить логику, чтобы обнаружить, что ни один клиент не был найден и бросать пользовательские исключения, или вы хотите, чтобы бросить исключение найденного в e.Error, например:
void OnGetCustomerCompleted(object sender, GetCustomerCompletedEventArgs e)
{
if (e.Error != null)
throw new ApplicationException("GetCustomer failed", e.Error);
if (String.IsNullOrEmpty(e.Result.FirstName) && String.IsNullOrEmpty(e.Result.LastName))
throw new CustomerNotFoundException();
}
(я опущено биты кода, который устанавливает объект Customer и сохраняется через вызовы.)
Вы запускаете вызов GetCustomerAsync в Page_Load и ожидаете получить результат в обработчике, подключенном к Page.OnPreRenderComplete.
Мой вопрос: как вы поймаете исключение на своей странице? Я знаю, что вы можете поймать его с помощью приложения Global.asax ApplicationError, но что, если вы не хотите перемещаться от своей страницы?
А, да. Или, если асинхронный вызов находится в классе, вызываемом страницей (так как мое приложение действительно структурировано), передайте исключение в объекте Customer в свойстве или объекте, у которого есть Клиент и исключение как свойства. –