2010-02-12 2 views
1

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

[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, но что, если вы не хотите перемещаться от своей страницы?

ответ

1

Вы не хотите генерировать исключение из обработчика события. Нет ничего, чтобы поймать исключение!

Если вы видите исключение, установите флаг на странице. Если вам нужен обработчик OnPreRenderComplete для использования сведений об исключении, флаг может быть самим исключением. Если установлено значение null, исключение не было, в противном случае это исключение, которое вы нашли.

+0

А, да. Или, если асинхронный вызов находится в классе, вызываемом страницей (так как мое приложение действительно структурировано), передайте исключение в объекте Customer в свойстве или объекте, у которого есть Клиент и исключение как свойства. –

Смежные вопросы