WCF服务的企业库异常处理问题

时间:2012-10-19 22:48:09

标签: exception-handling enterprise-library

我的应用程序由3层组成,非常简单。

  • 具有所有业务逻辑的类库
  • 公开类库的WCF服务
  • asp.net web UI。

在类库层,我定义了一个企业库异常处理策略,以便将所有异常记录到数据库中。在底层代码中,抛出异常,它们合并到外观。在外观中,我触发EL策略来记录错误,然后我在响应中切换sucessStatus布尔值,并有一个方法将我的所有异常转换为友好列表,以便最终的消费者可以挖掘这个以获得任何想法什么是正在发生的。

我班级图书馆的门面看起来像这样:

public SomeResponse DoSomething(SomeRequest request)
        {   
        SomeResponse response = new SomeResponse();
            try
            {
                response.data = SomeOperationThatWillThrowAnException;
            }
            catch (InvalidOperationException ex)
            {
                var exceptionManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
                exceptionManager.HandleException(ex, "StandardPolicy");
                response.Errors.Add(Utility.ExceptionToError(ex));
                response.SuccessStatus = false;
            }
        return response;
    }

如果我构建一个简单的winform客户端并让它与我的类库通信,这是有效的。

然而,当我使用完整堆栈时,我得到“用户代码未处理错误异常”。我似乎无法以任何方式在WCF层配置EL以防止这种情况发生。

我的WCF服务只是我的类库外观的简单包装。

public SomeResponse DoSomething(SomeRequest request)
{
    return new MyFacade.DoSomething(request);
}

我想要的是让类库以静默方式处理错误,而不是在WCF或UI级别触发任何异常。我希望消费者(在这种情况下是ASP.NET webform UI)必须检查响应消息内容,以获得发生的事情的线索,而不是让异常停止执行死在其轨道上。

1 个答案:

答案 0 :(得分:1)

您的配置文件可能有错误,导致GetInstance()或HandleException()抛出异常。您是否尝试过调试WCF服务?