首先,我将解释我项目的结构:
我有一个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-class位于不同的项目中,是我查询数据库的地方。
对于异常处理应用程序块采取哪种方法,我有点困惑: 我是否尝试了...查看queryhandler中的每个dataaccess代码并执行异常处理,如:
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;
}
或者我把它放在我的webservice类中,如:
public MyObject GetMyObject(string param1, string param2)
{
var exceptionManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
return exceptionManager.Process(() => _queryHandler.GetMyObject(param1, param2), "Exceptions Policy");
}
答案 0 :(得分:2)
由于您提到了WCF,因此您可以使用内置的[ExceptionShielding]
属性来处理服务中的异常。
你最终会得到这样的东西:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(FaultContracts.GetMyObjectFault))]
MyObject GetMyObject(string param1, string param2);
}
[ExceptionShielding("GetMyObjectServicePolicy")]
public class MyService : IMyService
{
private QueryHandler _queryHandler;
public MyService()
{
_queryHandler = new QueryHandler();
}
public MyObject GetMyObject(string param1, string param2)
{
return _queryHandler.GetMyObject(param1, param2);
}
}