无法获取catch语句来捕获自定义异常

时间:2010-03-12 02:30:03

标签: .net

我在业务层创建了一个自定义异常,并且还使用了wcf层,我在业务层中调用方法,然后在另一个网站中调用wcf中的方法。我可以看到我在自定义异常中写入的消息,但是当程序在我的第一个catch块(第二个catch块)上,而不是点击我的第一个catch块(自定义异常的地方),当我将鼠标悬停在异常上时,我看到了我的消息但它是在我不熟悉的一种叫做faultexception的东西里面。并且在详细信息下......在那里我看到type = CanOnlyApplyOnceException。这是我的代码:

 protected void AddNewApplication()
    {
        try
        {
            using (var proxy = new ServiceReference1.ServiceClient())
            {
                proxy.AddApplication(new Application
                {
                    Credentials = 2,
                    Comments = txtComments.Text,
                });
            }
        }
        catch (CanOnlyApplyOnceException c)
        {
            ErrorSummary.AddError(c.Message, this);
            return;
        }
        catch (Exception)
        {
            lblStatus.Text = "There has been an error.  Please try again";
        }
    }

2 个答案:

答案 0 :(得分:1)

你需要做两件事:

  1. 在WCF服务上的方法声明中添加FaultContract属性,如下所示:

    
    [OperationContract]
    [FaultContract((typeof(CanOnlyApplyOnceException))]
    void AddApplication(Application your_variable_name); 
    
  2. 然后确保抛出CanOnlyApplyOnceException类型的异常。

    1. 将您的catch块更改为:

      catch (FaultException<CanOnlyApplyOnceException> c)
      

答案 1 :(得分:0)

如果服务抛出异常,则会在客户端上抛出

FaultException

根据服务的不同,您可以写

    catch (FaultException<CanOnlyApplyOnceException> c)
    {
        ErrorSummary.AddError(c.Detail.Message, this);
        return;
    }