Представьте себе веб-сервис с методом, который возвращает объект Customer, который принимает идентификатор клиента в качестве параметра, т.е.
[WebMethod]
Customer GetCustomer(string customerId)
Теперь представьте, что вы пишете приложение ASP.NET и создали прокси-сервер для службы с асинхронными операциями. Вы создаете экземпляр службы, проводной service.GetCustomerCompleted для вашего обработчика OnGetCustomerCompleted и вызываете service.GetCustomerAsync ("12345").
В OnGetCustomerCompleted вы применяете логику, чтобы обнаружить, что ни один клиент не был найден, и выбрасываете пользовательское исключение, или вы хотите выбросить исключение, найденное в e.Error, например ::1006*.
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.
Мой вопрос: как вы ловите исключение на своей странице? Я знаю, что вы можете поймать его с помощью ApplicationError Global.asax, но что, если вы не хотите уходить со своей страницы?