Как FileSystemWatcher работает на другом каталоге компьютеров?
Что-то интригует меня, и я не нахожу никаких ресурсов на этом.
Как FileSystemWatcher может знать, когда файл на компьютере "A" создается/удаляется/изменяется / переименовывается ?
Я думал, что это работает с опросом (наблюдатель опрашивает сервер, чтобы проверить обновление), но после проверки сетевой активности с Wireshark я увидел, что опрос не использовался. Использует ли протокол SMB шаблон observable/observer ?
в этом случае как сервер может знать когда клиент больше не наблюдает за ним ?
каковы последствия, когда сеть падает во время наблюдения и возвращается сразу после этого?
использование FileSystemWatcher на другом компьютере кажется слишком простым, чтобы быть правдой...
2 ответов
использование FileSystemWatcher на другом компьютер кажется слишком легким, чтобы быть правдой...
это своего рода. Базовый API -ReadDirectoryChanges()
- открывает соединение с сервером, который отвечает за реагирование, когда что-то меняется. Если это соединение по какой-то причине удаляется или вы сталкиваетесь с ограничением соединения ОС, к которой подключаетесь, вы не получаете уведомлений.
я обнаружил, что он более надежен для опрос периодически (с некоторым довольно длинным интервалом), и использовать FileSystemWatcher
только как способ быстрого реагирования на изменения между опросами.
Я думаю, что FileSystemWatcher использует шаблон observer / observable на основе базового Win32 API. Не уверен в фактических событиях, но, по-видимому, при инициализации объекта FileSystemWatcher для просмотра сетевого пути и установки свойства EnableRaisingEvents он присоединяется за кулисами к папке в качестве наблюдателя, присоединяясь к событиям, вызванным Win32 API, как если бы папка была на том же компьютере.
в шаблоне дизайна наблюдателя, субъект (наблюдаемый) никогда не знает о количестве или типах наблюдателя, поэтому точка о другом компьютере, зная, когда FSW больше не наблюдает, не имеет значения.
Если сеть падает во время события, которое поднимается, это немного gotcha - кто-то другой должен будет помочь вам там.