我遇到了设计/架构问题,无法找到一个干净的解决方案。我们有一个包含数百个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
}
}
答案 0 :(得分:0)
引入一个类,该类使用带有正确异常处理的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;
}
}
}
使用该类修改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示例)。