2009-03-09 4 views
6

何か興味をそそられ、私はこれに関するリソースを見つけられません。FileSystemWatcherは他のコンピュータのディレクトリでどのように動作しますか?

コンピュータ "A"上のファイルが作成、削除、変更、または名前変更されたとき、FileSystemWatcherはどのように知ることができますか?

これはポーリングで働いていたと思っていましたが(観察者がサーバーをポーリングしてアップデートをチェックします)、Wiresharkでネットワーク活動を確認した後、ポーリングは使用されませんでした。 SMBプロトコルは観測可能/観測者パターンを使用していますか?

この場合、クライアントがもはや彼を観察しない時をサーバがどのように知ることができるか?

ネットワークが観測中に落ちて、直後に戻ったときの結果は何ですか?別のコンピュータ上でFileSystemWatcherを使用して

が本当であるには余りにも簡単に思える...

答えて

8

は本当であるには余りにも簡単に思える...

それはちょっとです。基礎となるAPI - ReadDirectoryChanges() - は、何かが変化したときの応答を担当するサーバーへの接続を開きます。何らかの理由でその接続が切断されたり、接続しているOSの接続制限にぶつかると、通知を受け取ることができません。

定期的に(ある程度の間隔を置いて)定期的にポーリングを行い、ポーリング間隔の変更に迅速に対応する方法としてFileSystemWatcherを使用する方が信頼性が高いことがわかりました。

0

私は、FileSystemWatcherは、基礎となるのWin32 APIに基づいて、観察/観測可能なパターンを使用しないと思います。実際のイベントは不明ですが、FileSystemWatcherオブジェクトを初期化してネットワークパスを監視し、EnableRaisingEventsプロパティを設定すると、おそらくWin32 APIが発生させたイベントにアタッチしてオブザーバーとしてフォルダーに追加しますそのフォルダは同じコンピュータ上にありました。

オブザーバーのデザインパターンでは、オブザーバーの数や種類が決して認識されないため、FSWが見ていないことを知っている他のコンピューターについてのポイントは無関係です。

イベントが発生している間にネットワークが陥落してしまった場合、それはちょっとした問題です。他の人があなたに手伝ってくれなければなりません。別の コンピュータ上でFileSystemWatcherを使用して

関連する問題