これはコードに関する直接的な質問ではなく、FileSystemWatcher/OS の動作に関する質問です。何千ものログファイルを監視するアプリがあります。アプリは何年も問題なく動作します。Server 2003 でホストされている共有に対して Server 2003 で実行されていました。
サーバー 2008 (R2) 上で実行され、ストアがサーバー 2008 (R2) 上にある場合、多くのイベントは生成されません。私は違いを示す簡単な再現を作成しました [しかし、私が言ったように: 長く実行されている古い proggi は適切に動作します]。ログを生成するアプリは、私のコードの管理下にはありません。私の再現では、そのようなログを一時停止して書き込みます-ライターや下層のストリームのフラッシュでさえ役に立ちません]。
Server 2003 では、各更新 [ロギング アプリからの書き込み操作] により、FSW が Size changed イベントを発生させます。Server 2008 では、これは、アプリがログ ファイルの書き込みを開始したときと、ログ ファイルが閉じたときにのみ発生します。途中でのイベントはもうありません。NTFS タイムスタンプを書き込むように REG キーを設定しても、この動作は変わりませんでした。
私は MS に電話をかける立場にはありませんが、おそらく誰かがこの動作を見て回避策を知っているでしょう。
私の頭に浮かぶ回避策は次のとおりです。 Server 2003 または Linux にダウングレードします。どちらも期待どおりに機能します。
どんなアイデアでも大歓迎です。
よろしくお願いします、
++マブラ
[ネット 2.0 => 4.0; 質問なし: すべてのパッチ、OS も]
[編集]
申し訳ありませんが、分析に問題がありました.... Server 2008 へのアプリの移行に伴い、新しいアプリが一連のファイルを監視するようになりました [同時に 2 つのことを変更しないでください....]。新しいアプリには別の動作があり、それから以前に読んだログのアプリ....
(1)古いアプリの使用: 開く/追加、書き込み、閉じる。
(2)新しいアプリの使用: 開く/作成、書き込み、スリープ、書き込み、スリープ、書き込み、閉じる。
FSW は、古いアプリの動作の変更されたイベントを提供しますが、新しいアプリの変更イベントは提供しません。FSW Notifyfilters.Size が期待どおりに機能しません。そのため、新しいアプリのログは FSW で監視できません。サイズ変更だけで chnaged イベントを発生させる回避策は見つかりませんでした。
しかし、これは次のとおりです。これは Windows Server 2008 です。mono を使用する Windows Server 2003 および Linux では、(2) の変更されたイベントも表示されます!!!!! だから、私の「タイトル」はそれほど悪くはありませんでした;-)
今の.Netに不満....
誰かがおそらくアイデアを持っている場合は、今すぐ教えてください!!
そして私のずさんな初めての分析で申し訳ありません... ;-)
br, ++マブラ