C#-Microsoftネットワーク負荷分散でイベントを使用する

職場では、 MSDNリソースが常に不足しています

つまり、一般的な説明が非常に詳細であっても、例が不足しているため、クラス/テクノロジーを使用する方法はほとんどありません。 合理的で透過的な使用方法を見つけるために、インターネット上のさまざまなリソースを検索するには非常に長い時間(場合によっては数時間)かかります。



私が持っていた最後の例の1つは、C#コード内でMicrosoft Network Load Balance( ここに表示されているもの )を使用したことです。 VBスクリプトからNLBを使用する例は多くあり、マネージコードから使用する例はほとんどありません。



タスク :特定の時間におけるマシン(クラスター)のステータスを決定します。

既存のソリューション :ポーリング-WMIを介したクエリを通じてステータスを決定します。

短所 :イベント自体の時点で状態の変更を見逃す可能性が高く、情報が不足しているため、状態を読み取るのにかかる時間が長くなります。

可能なアプローチ :「イベント」のメカニズムの適用。 このようなメカニズムは、例があっても存在しますが、コード内で使用するためのものではありません。

解決策



mainメソッドの宣言:

String mePath = "\\\\localhost\\root\\MicrosoftNLB" ;

ManagementEventWatcher watcher1 = new ManagementEventWatcher(mePath, "SELECT * FROM MicrosoftNLB_NodeControlEvent" );

watcher1.EventArrived += new EventArrivedEventHandler(watcher_NodeControlEventArrived);

watcher1.Options.Timeout = new TimeSpan (0, 0, 1);

watcher1.Start(); //need Stop!!!!!!!




* This source code was highlighted with Source Code Highlighter .








String mePath = "\\\\localhost\\root\\MicrosoftNLB" ;

ManagementEventWatcher watcher1 = new ManagementEventWatcher(mePath, "SELECT * FROM MicrosoftNLB_NodeControlEvent" );

watcher1.EventArrived += new EventArrivedEventHandler(watcher_NodeControlEventArrived);

watcher1.Options.Timeout = new TimeSpan (0, 0, 1);

watcher1.Start(); //need Stop!!!!!!!




* This source code was highlighted with Source Code Highlighter .














イベント通知を受信するためのコールバックの説明:

static void watcher_NodeControlEventArrived( object sender, EventArrivedEventArgs e)

{

//http://msdn.microsoft.com/en-us/library/bb736304(VS.85).aspx

ManagementEventWatcher watcher = (ManagementEventWatcher)sender;

Console .WriteLine(watcher.Query.QueryString.ToString());

PropertyData property;

if ((property = e.NewEvent.Properties[ "Id" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "InstanceName" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "Active" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "AdapterGuid" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "ClusterIPAddress" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "HostPriority" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

}




* This source code was highlighted with Source Code Highlighter .








static void watcher_NodeControlEventArrived( object sender, EventArrivedEventArgs e)

{

//http://msdn.microsoft.com/en-us/library/bb736304(VS.85).aspx

ManagementEventWatcher watcher = (ManagementEventWatcher)sender;

Console .WriteLine(watcher.Query.QueryString.ToString());

PropertyData property;

if ((property = e.NewEvent.Properties[ "Id" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "InstanceName" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "Active" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "AdapterGuid" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "ClusterIPAddress" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

if ((property = e.NewEvent.Properties[ "HostPriority" ]) != null )

{

Console .WriteLine(property.Name + ": " + property.Value);

}

}




* This source code was highlighted with Source Code Highlighter .














コメント

MicrosoftNLB_NodeControlEvent 」の代わりに、他のイベントも受け取ることができます-「 ネットワーク負荷分散WMIクラス 」の完全なリストを参照し、それに応じてイベント構造からプロパティを読み取ります。



追伸 これが私の「ペンテスト」です。 Habréでのこうした投稿の不適切さについて、有用性とデザインについて、またはその逆についてフィードバックをもらいたいと考えています。 ありがとう



All Articles