0
首先处理我会解释我的项目的结构:异常与企业库5.0
我有一个WCF服务
public class MyService : IMyService
{
private QueryHandler _queryHandler;
public MyService()
{
_queryHandler = new QueryHandler();
}
public MyObject GetMyObject(string param1, string param2)
{
return _queryHandler.GetMyObject(param1, param2);
}
}
的QueryHandler级是在不同的项目,是地方我在哪里查询我的数据库。
我有点困惑哪种方法有关异常处理应用程序块采取: 不要我把一个try ... catch围绕在queryhandler每一个数据访问代码并执行异常处理,如:
try
{
//Do something
}
catch (Exception ex)
{
ExceptionManager exManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
Exception exceptionToThrow;
bool rethrow = exManager.HandleException(ex, "Exceptions Policy", out exceptionToThrow);
if (rethrow)
{
if (exceptionToThrow == null)
{
throw;
}
else
{
throw exceptionToThrow;
}
}
return null;
}
还是我把它放在我的web服务类,如:
public MyObject GetMyObject(string param1, string param2)
{
var exceptionManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
return exceptionManager.Process(() => _queryHandler.GetMyObject(param1, param2), "Exceptions Policy");
}
这将是我下一步;-)但是,如果我理解正确,使用ExceptionShielding的时候,我不需要使用任何尝试...再抓?还是我仍然必须把它们放在我的QueryHandler类中? – Koen 2011-05-02 12:59:27
使用该属性时,您不必担心代码中的任何“try {} catch {}”块,因为屏蔽策略应为您处理这些问题。如果你可以从异常中恢复,你可能仍然需要在'QueryHandler'中尝试{} catch {}'块,但是如果所有的策略都是'rethrow',我将把处理保留为屏蔽属性。 – 2011-05-02 13:17:52
非常感谢。仍然需要做一些关于屏蔽的阅读,但这是一个很大的帮助。 – Koen 2011-05-02 14:10:42