Сначала я объясню структуру моего проекта:
У меня есть 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
{
//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;
}
или я могу поместить его в свой класс веб-сервиса, например:
public MyObject GetMyObject(string param1, string param2)
{
var exceptionManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
return exceptionManager.Process(() => _queryHandler.GetMyObject(param1, param2), "Exceptions Policy");
}