捕获异步Web服务中抛出的异常,完成事件处理程序

时间:2010-02-12 03:15:57

标签: c# asp.net exception-handling asynchronous

想象一个带有返回Customer对象的方法的Web服务,该方法将客户ID作为参数,即

[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对象并通过调用保留它的代码。)

您在Page_Load中启动对GetCustomerAsync的调用,并希望在连接到Page.OnPreRenderComplete的处理程序中检索结果。

我的问题是,您如何在页面中捕获异常?我知道你可以用Global.asax的ApplicationError来捕获它,但是如果你不想离开你的页面呢?

1 个答案:

答案 0 :(得分:1)

您不希望从事件处理程序中抛出异常。没有什么可以捕获异常!

如果看到异常,请在页面中设置一个标志。如果您需要OnPreRenderComplete处理程序来使用异常详细信息,则该标志本身可以是异常。如果设置为null,则没有异常,否则它是您找到的异常。