Как FileSystemWatcher работает на другом каталоге компьютеров?

Что-то интригует меня, и я не нахожу никаких ресурсов на этом.

Как FileSystemWatcher может знать, когда файл на компьютере "A" создается/удаляется/изменяется / переименовывается ?

Я думал, что это работает с опросом (наблюдатель опрашивает сервер, чтобы проверить обновление), но после проверки сетевой активности с Wireshark я увидел, что опрос не использовался. Использует ли протокол SMB шаблон observable/observer ?

в этом случае как сервер может знать когда клиент больше не наблюдает за ним ?

каковы последствия, когда сеть падает во время наблюдения и возвращается сразу после этого?

использование FileSystemWatcher на другом компьютере кажется слишком простым, чтобы быть правдой...

2 ответов


использование FileSystemWatcher на другом компьютер кажется слишком легким, чтобы быть правдой...

это своего рода. Базовый API -ReadDirectoryChanges() - открывает соединение с сервером, который отвечает за реагирование, когда что-то меняется. Если это соединение по какой-то причине удаляется или вы сталкиваетесь с ограничением соединения ОС, к которой подключаетесь, вы не получаете уведомлений.

я обнаружил, что он более надежен для опрос периодически (с некоторым довольно длинным интервалом), и использовать FileSystemWatcher только как способ быстрого реагирования на изменения между опросами.


Я думаю, что FileSystemWatcher использует шаблон observer / observable на основе базового Win32 API. Не уверен в фактических событиях, но, по-видимому, при инициализации объекта FileSystemWatcher для просмотра сетевого пути и установки свойства EnableRaisingEvents он присоединяется за кулисами к папке в качестве наблюдателя, присоединяясь к событиям, вызванным Win32 API, как если бы папка была на том же компьютере.

в шаблоне дизайна наблюдателя, субъект (наблюдаемый) никогда не знает о количестве или типах наблюдателя, поэтому точка о другом компьютере, зная, когда FSW больше не наблюдает, не имеет значения.

Если сеть падает во время события, которое поднимается, это немного gotcha - кто-то другой должен будет помочь вам там.