想象一个带有返回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来捕获它,但是如果你不想离开你的页面呢?
答案 0 :(得分:1)
您不希望从事件处理程序中抛出异常。没有什么可以捕获异常!
如果看到异常,请在页面中设置一个标志。如果您需要OnPreRenderComplete
处理程序来使用异常详细信息,则该标志本身可以是异常。如果设置为null,则没有异常,否则它是您找到的异常。