我的应用程序由3层组成,非常简单。
在类库层,我定义了一个企业库异常处理策略,以便将所有异常记录到数据库中。在底层代码中,抛出异常,它们合并到外观。在外观中,我触发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)必须检查响应消息内容,以获得发生的事情的线索,而不是让异常停止执行死在其轨道上。
答案 0 :(得分:1)
您的配置文件可能有错误,导致GetInstance()或HandleException()抛出异常。您是否尝试过调试WCF服务?