2011-01-04 9 views
0

私は、ASP.Netヘルスモニタリング用のカスタムプロバイダーの作成方法と使用方法に関するウォークスルーをお探しです。ASP.Netヘルスモニタリング用のカスタムプロバイダの作成方法と構成方法

これまでのところ、エラー時に電子メールを生成する電子メールプロバイダとしか連携していませんでした。基本的には同じことをやりたいのですが、より柔軟に対応したい:
私はイベントにアクセスできるようにHealthMonitoring機能を使用したい(私はglobal.asaxでApplication_OnErrorイベントを使いたくない)カスタムコードを実行するために、電子メールに提供されたすべての情報を含む "OnNewHealthMonitoringEntry"のようにスローされます。

編集:私は私自身のカスタムプロバイダを構築し、それを実装することができましたhttp://www.asp.net/general/videos/how-do-i-create-a-custom-provider-for-logging-health-monitoring-eventsここに提供されたソースコードに基づいて
。カスタムプロバイダを設定するための新しい属性を追加したいと思います。ここ は、web.configファイルは次のようになります。私はこの

<providers> 
    <add name="FileEventProvider" buffer="true" bufferMode="Log Notification" foo="bar" type="healthmonitoringtest.FileHealthMonitorEventProvider"/> 
</providers> 

のように、プロバイダに属性を追加しようとすると

<healthMonitoring> 
    <bufferModes> 
     <add name="Log Notification" maxBufferSize="1" maxFlushSize="1" urgentFlushThreshold="1" regularFlushInterval="Infinite" urgentFlushInterval="00:00:10"/> 
    </bufferModes> 
    <providers> 
     <add name="FileEventProvider" buffer="true" bufferMode="Log Notification" type="healthmonitoringtest.FileHealthMonitorEventProvider"/> 
    </providers> 
    <profiles> 
     <add name="Custom" minInstances="1" maxLimit="Infinite" minInterval="00:00:00"/> 
    </profiles> 
    <rules> 
     <add name="File Event Provider" eventName="All Errors" provider="FileEventProvider" profile="Custom"/> 
    </rules> 
</healthMonitoring> 

私はエラーが言ってますよ:

の例外 'System.Configuration.ConfigurationErrorsException' がSystem.Web.dllで発生しましたが、ユーザーコードで処理された ではありませんでした。 l 情報: FileEventProviderの構成で、予期しない属性foo があります。

カスタムプロバイダに必要な設定をhealthMonitoringセクションの近くに保存することはできますか?私はappSettingsノードに設定を含めることができたと思いますが、何らかの形で(healthMonitoringノード内の)属性を設定したいと思います。それは可能ですか?

EDIT2: あなたがこの記事を見てかかることがあります:http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e-mails

+1

あなたが見つけたリンクのどの部分が不明ですか?おそらく、私たちがそこから始めるなら、あなたに良い答えを与えることができます。 – NotMe

+0

「不明」の場合は、このコードサンプルを使用したアプローチが、カスタムプロバイダを使用する正しい方法か、古い非推奨のコードである場合を意味します。 – citronas

+0

私の質問を編集し、プロバイダに任意の属性。私のgoogle検索は、私の宗教に関連する回答を出さなかった。 (これは新しい質問をするのも納得できませんでした) – citronas

答えて

2

series of articlesは、カスタムイベントを作成する点で最大ヘルスモニタリングシステムを使用しての基本をお連れします。

次に、26 minute videoは、イベントをテキストベースのログファイルに記録するカスタムプロバイダーの作成をお手伝いします。コメント

あなたの更新を見て、あなたは上のカスタムプロバイダをベースBufferedWebEventProviderクラスのソースを見て反射板を使用することに基づいて

UPDATEは、私がBufferedWebEventProviderでInitializeメソッドは、チェックを行うことを発見しました最後に、認識できない属性があるかどうかを確認します。これは、BufferedWebEventProviderのプロパティまたはフィールドに割り当てられるとすぐに、設定NameValueCollectionパラメータから値を削除することによって行われます。次に、configパラメータが空であるかどうかを確認するためのチェックが行われ、そうでない場合は、余分な属性が追加されていることを意味し、例外がスローされます。

  1. はできるだけ早くあなたがそれらを割り当てるよう
  2. は、追加の属性を削除する方法の最後にbase.Initializeへの呼び出しを移動:

    は、この問題を解決する方法としては、1つのオプションはであり変数はプロバイダと同様です。

次のようなものは動作します:

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
    { 
     foo = config["foo"]; 
     if (String.IsNullOrEmpty(foo)) 
     { 
      // You can set a default value for foo 
     } 

     //remove foo from the config just like BufferedWebEventProvider with the other 
     //attributes. Note that it doesn't matter if someone didn't proivde a foo attribute 
     //because the NameValueCollection remains unchanged if you call its Remove method 
     //and the name doesn't exist. 
     config.Remove("foo"); 

     base.Initialize(name, config); 
    } 

うまくいけば、これはあなたのために動作します。

+0

ビデオは私にすべての必要な情報を提供しました – citronas

+0

@citronasサービスに満足しています:) –

+0

;)申し訳ありませんが、私は自分のカスタムプロバイダーの構成上の問題を見つけました。もう一度見てもらえますか? =)私の質問を編集しました – citronas

関連する問題