.NET WebService错误处理设计

时间:2017-09-15 15:02:10

标签: c# .net design-patterns

我遇到了设计/架构问题,无法找到一个干净的解决方案。我们有一个包含数百个WebMethods的.NET WebService。 (见下面的例子)。如果任何被调用的WebMethods抛出未处理的异常,我们想要生成一封电子邮件。

问题:在这种情况下使用什么是干净的设计模式。我想避免将重复的代码插入到数百种方法中?

[WebService(Namespace = "http://example.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[Serializable]
public class WebService : System.Web.Services.WebService
{
    [WebMethod]
    public string GetQuoteInfo(string request)
    {
        return QuoteService.GetQuoteInfo(request);
    }

    [WebMethod]
    public string GetQuoteAPR(string request)
    {
        return QuoteService.GetQuoteAPR(request);
    }

    [WebMethod]
    public string GetAccountContactInfo(string request)
    {
        return AccountService.GetAccountContactInfo(request);
    }

    ...
    ...
    ...

    [WebMethod]
    public string GetAccountContactInfo(string request)
    {
        // implementation
    }

}

3 个答案:

答案 0 :(得分:0)

  1. 引入一个类,该类使用带有正确异常处理的try / catch块包装实际方法。

    public static class InvocationHelper
    {
       public static string SafeInvoke(Func<string, string> f, string request)
       {
           try
           {
               return f(request);    
           }
           catch(Exception ex)
           {
               NofityAboutException(ex);
               return null;
           }
       }
    }
    
  2. 使用该类修改WebService方法:

    [WebMethod]
    public string GetQuoteInfo(string request)
    {
       return InvocationHelper.SafeInvoke(r => QuoteService.GetQuoteInfo(r), request);
    }
    

答案 1 :(得分:0)

试 {

您的网络方法中的代码

    }

    catch (Exception e)
    {

//通过电子邮件发送此错误消息

        e.Message;
        throw;
    }

将它放在您的所有方法上,因为无法获得完美的错误消息。它的一次性工作来获取错误消息,您每次都可以自由调试代码。

答案 2 :(得分:0)

一种方法是使用AOP库,例如NConcern。 根据您的情况,它可能有一些限制,因为必须使用CNeptune重写库(参见NCover示例)。