Как FileSystemWatcher работает в каталоге другого компьютера? - PullRequest
6 голосов
/ 09 марта 2009

Что-то меня заинтриговало, и я не нашел в этом никакого ресурса.

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 09 марта 2009

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

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

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

0 голосов
/ 09 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...