我已经实现了一个通用方法,用于在我的 Web 服务方法中调用函数并捕获异常。这个想法是集中异常处理并记录异常发生的原因:
public class WebServiceHandler
{
public T Execute<T>(Func<T> body)
{
//wrap everything in common try/catch
try
{
return body();
}
catch (SoapException)
{
//rethrow any pre-generated SOAP faults
throw;
}
catch (Exception ex)
{
Logger.AddTextToLog(Logger.LogLevel.Error, "An error occured");
var innerExceptionMessage = ex.InnerException != null ? ex.InnerException.Message : "";
throw GenerateSoapException(
ex.Message,
innerExceptionMessage,
SoapException.ServerFaultCode);
}
}
}
我在我的网络服务方法中使用这样的方法:
[WebMethod]
GetXXX(string param1, string param2)
{
var request = new GetXXXRequest(param1, param2);
return _webServiceHandler.Execute(() => _controller.GetXXX(request));
}
[WebMethod]
GetYYY(string param1)
{
var request = new GetYYYRequest(param1);
return _webServiceHandler.Execute(() => _controller.GetYYY(request));
}
如果出现异常,我想在 Execute 方法中记录用作 controller.GetXXX(request) 和 controller.GetYYY(request) 方法的输入的参数名称和值。
我怎样才能做到这一点?还是有更好的方法来实现相同的目标?