我有一个Ria服务来调用逻辑代码。我想在每个逻辑函数中编写try catch块,以提供处理非常规异常的方法。
try
{
//something
}
catch(BussinessException e)
{
//save e.info to database
}
但我不想在我的逻辑中到处编写这个块代码,并且我不想将异常处理部分放在RIA服务中,因为另一种类型的服务也会调用逻辑。
是否有人为我提供一个单一的异常处理解决方案?
答案 0 :(得分:2)
基于你的历史,我很确定这是C#所以这是我的看法。
避免重复的最好方法是将这样的逻辑包装起来。
private static void ExecuteLogic(Action action)
{
try
{
action();
}
catch(BussinessException e)
{
//save e.info to database
}
}
有了这个,您可以轻松执行共享相同错误处理的各种操作。
ExecuteLogic(
() =>
{
// Do something...
}
);
答案 1 :(得分:0)
如果您只想记录异常,我可以从您的示例中看到,您可以订阅AppDomain.FirstChanceException。但是你无法处理它。哦。顺便说一句,这个事件只在.NET 4中引入:(。
答案 2 :(得分:0)
这是一个使用命令模式的更传统的面向对象解决方案。
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));
}
}
答案 3 :(得分:0)
实施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