2009-03-09 2 views
6

Что-то интригует меня, и я не нахожу ресурсов на этом.Как работает FileSystemWatcher в другом компьютере?

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

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

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

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

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

ответ

8

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

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

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

0

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

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

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