обрабатывать необработанное исключение - PullRequest
1 голос
/ 05 октября 2010

У меня есть служба Ria для вызова логического кода. Я хочу написать блок try catch в каждой логической функции, чтобы обеспечить способы обработки необработанных исключений.

try
{
//something
}
catch(BussinessException e)
{
//save e.info to database
}

Но я не хочу писать этот код блока везде в моей логике, и я не хочу помещать часть обработки исключений в службу RIA, так как другой тип службы также вызывает логику.

У кого-нибудь есть решение для обработки исключений в одном месте?

Ответы [ 4 ]

2 голосов
/ 05 октября 2010

Исходя из вашей истории, я почти уверен, что это C #, поэтому вот мое мнение.

Лучший способ избежать дублирования - это обернуть вашу логику вот так.* Имея это в виду, вы можете легко выполнять различные операции с одинаковой обработкой ошибок.

ExecuteLogic(
    () =>
    {
        // Do something...
    }
);
0 голосов
/ 05 октября 2010

реализовать IHttpModule

web.config:

<httpModules>
    ...
    <add type="Citiport.Web.Module.ErrorHandleModule" name="GlobalErrorHandler" />
    ...
</httpModules>

Класс:

public class ErrorHandleModule : IHttpModule
    {

        private static readonly ILog logger = LogManager.GetLogger("Citiport.Web.Module.ErrorHandleModule");

        public ErrorHandleModule()
        {

        }

        void IHttpModule.Dispose()
        {
        }

        void IHttpModule.Init(HttpApplication context)
        {
            context.Error += new System.EventHandler(onError);
        }

        public void onError(object obj, EventArgs args)
        {
            HttpContext ctx = HttpContext.Current;
            HttpResponse response = ctx.Response;
            HttpRequest request = ctx.Request;

            Exception exception = ctx.Server.GetLastError();
            /* handling exception here*/
        }
    }
}

см http://code.google.com/p/citiport2/source/browse/trunk/CitiportV2_website/App_Code/Web/ErrorHandleModule.cs

0 голосов
/ 05 октября 2010

Вот более традиционное объектно-ориентированное решение с использованием шаблона команд.

public interface ICommand {
  void Execute();
}

public class BankAccountWebServiceCall: ICommand(){

  string name;
  int accountNo;

  public BankAccountWebServiceCall(string name, int accountNo) {
    this.name= param1;
    this.accountNo= accountNo;
  }

  //ICommand implementation
  public void Execute() {
    SomeWebService.Call(name, accountNo);
  }
}

public class WebServiceCaller {
  public void CallService(ICommand command) {
    try {
      command.Execute();
    } catch (SomeBusinessException ex) {
      //handle exception
    }
  }
}

public class WebServiceCallerTest {
  public static void CallServiceTest() {
    new WebServerCaller().CallService(new TwoParameterwebServiceCall("Igor", 12345));
  }
}
0 голосов
/ 05 октября 2010

Если вы хотите регистрировать только исключения, как я вижу из вашего примера, вы можете подписаться на AppDomain.FirstChanceException .Но вы не сможете справиться с этим.Ой.Кстати, это событие было представлено только в .NET 4: (.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...