0

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

  • 具有所有业务逻辑的类库
  • 公开类库的 WCF 服务
  • asp.net 网页界面。

在类库层,我定义了一个企业库异常处理策略,以便将所有异常记录到数据库中。在底层代码中,异常被抛出,它们合并到外观上。在外观中,我触发 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)必须检查响应消息内容以了解发生了什么,而不是让异常停止执行死在其轨道上。

4

1 回答 1

1

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

于 2012-10-26T12:15:12.420 回答