2009-03-09 8 views
6

Quelque chose m'intrigue et je ne trouve aucune ressource à ce sujet.Comment FileSystemWatcher fonctionne sur un autre répertoire d'ordinateurs?

Comment FileSystemWatcher sait-il qu'un fichier sur un ordinateur "A" est créé/supprimé/changé/renommé? Je pensais que cela fonctionnait avec l'interrogation, (l'observateur interroge le serveur pour vérifier la mise à jour), mais après avoir vérifié l'activité du réseau avec Wireshark, j'ai vu que l'interrogation n'était pas utilisée. Le protocole SMB utilise-t-il un modèle observable/observateur?

Dans ce cas comment le serveur peut-il savoir quand un client ne l'observe plus?

Quelle est la conséquence lorsque le réseau tombe pendant une observation et revient juste après?

En utilisant FileSystemWatcher sur un autre ordinateur semble trop facile pour être vrai ...

Répondre

8

En utilisant FileSystemWatcher sur un autre ordinateur semble trop facile pour être vrai ...

Il est un peu. L'API sous-jacente - ReadDirectoryChanges() - ouvre une connexion au serveur, qui est responsable de répondre lorsque quelque chose change. Si cette connexion est abandonnée pour une raison quelconque, ou si vous vous heurtez à la limite de connexion du système d'exploitation auquel vous vous connectez, vous n'obtenez pas de notifications.

J'ai trouvé qu'il est plus fiable d'interroger périodiquement (avec un intervalle plutôt long), et d'utiliser FileSystemWatcher seulement comme un moyen de répondre rapidement aux changements entre les sondages.

0

Je pense que FileSystemWatcher n'utilise un observateur/motif observable basée sur l'API Win32 sous-jacente. Vous n'êtes pas sûr des événements réels mais vraisemblablement lorsque vous initialisez un objet FileSystemWatcher pour regarder un chemin réseau et définir la propriété EnableRaisingEvents, il se joint derrière les scènes au dossier en tant qu'observateur en attachant aux événements déclenchés par l'API Win32 comme ils le feraient si le dossier était sur le même ordinateur. Dans le modèle de conception Observer, le sujet (observable) n'est jamais conscient du nombre ou des types d'observateur; par conséquent, le point sur l'autre ordinateur qui sait quand le FSW ne regarde plus est sans importance.

Si le réseau tombe pendant un événement en cours de levée, c'est un peu un piège - quelqu'un d'autre devra vous y aider.

Questions connexes