2017-09-15 9 views
1

私は設計上/アーキテクチャ上の問題に直面しており、きれいな解決策を見つけられません。何百ものWebメソッドを持つ.NET WebServiceがあります。 (下記の例を参照)。呼び出されたWebMethodのいずれかが未処理の例外をスローした場合は、電子メールを生成する必要があります。.NET WebServiceエラー処理デザイン

質問:このような状況で使用するクリーンなデザインパターンは何でしょうか。私は何百ものメソッドにの繰り返しコードを挿入することを避けたいですか?

[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 
    } 

}

+1

おそらく関連するブログ記事:[グローバルWebサービス未処理例外の処理](https://blogs.msdn.microsoft.com/nikhilsi/2008/06/11/handling-global-web-service-unhandled-exceptions/) 。 – Romoku

答えて

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. そのクラスを使用してWebサービスのメソッドを変更します。

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

は、Webメソッドでここにコード{//メール

} 

    catch (Exception e) 
    { 

を を試してみてくださいこのエラーメッセージ

 e.Message; 
     throw; 
    } 

完璧なエラーメッセージが表示されないため、すべての方法に入力してください。その一度だけエラーメッセージが表示され、毎回コードをデバッグすることができます。

0

NConcernのようなAOPライブラリを使用する方法もあります。 シナリオによっては、ライブラリをCNeptune(NCoverの例を参照)で書き直す必要があるため、いくつかの制限があります。