我的应用程序由 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)必须检查响应消息内容以了解发生了什么,而不是让异常停止执行死在其轨道上。