c# - ASMX Web 服务的基类 - 从基类本身调用派生方法

标签 c# .net asp.net web-services asmx

我有一堆 asmx Web 服务,并且 Web 服务内的所有方法都遵循通用模式

public virtual TestObject Test()

{
   LogRequest;
   try
   {
    DoSomething;
   }
   catch
   {
     LogException;
   }

   LogResponse;
   return response;
}

而且所有的方法都遵循这个模式,有很多代码重复;我想知道是否有一种方法可以通用地执行此操作,即:可能在基类构造函数中?这可能吗?

编辑:

模板方法模式是一个很好的解决方案,但最终对我们来说最优雅的解决方案是 AOP!日志记录全部提取到一个方面,并且所有需要日志记录的方法都使用属性进行修饰并发布明确的规则!

最佳答案

您可以在某个地方(在基类中或在任何地方声明为静态)有一个方法来执行所有常见的操作:

T DoCommon<T>(Request r, Func<T> f)
{
  LogRequest(r);

  T result;
  try { result = f(); }
  catch(Exception ex) { LogException(ex); } 

  LogResult(result);
  return result;
}

然后您只需包含对该方法的调用:

public virtual TestObject Test()
{
   return DoCommon(Request, () => DoSomething());
}

关于c# - ASMX Web 服务的基类 - 从基类本身调用派生方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663819/

相关文章:

c# - 如何实现取消共享任务:s in C#

C#/LINQ 比较两个列表和赋值的最快方法

c# - 抛出异常 : 'System.OutOfMemoryException' in ZeroMQ. dll

c# - 在异步方法中处理空任务的最佳方法?

asp.net - 浏览器关闭时 ASP.NET session 如何过期?

asp.net - JSON 可以调用 .aspx 文件中的方法,但不能调用 .asmx(ASP.NET Web 服务)文件中的方法

c# - 长时间运行的应用程序

c# - 以特定格式 .net 将 DateTime 序列化为 XML

c# - 从 ALT+TAB 菜单隐藏无边框窗口

asp.net - 图片网址正确,但图片未显示