Laden...

Fileserver: Wie Änderungen an einer lokal kopierten Datei mitbekommen?

Erstellt von Tom2010 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.742 Views
Hinweis von gfoidl vor 13 Jahren

Abgeteilt von Filecopy auf Server - Freigaben und Rechte

T
Tom2010 Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren
Fileserver: Wie Änderungen an einer lokal kopierten Datei mitbekommen?

Danke noch einmal für den Tipp in die richtige Richtung!

Files speichern und lesen klappt mittlerweile wunderbar.

Ein kleines Problem habe ich allerdings noch, vielleicht kann mir jemand einen Fingerzeig geben:

Speichere ich z.B. eine Excel Datei in der DB, muss ich sie, wenn der Nutzer mit der Datei arbeiten will, ja temporär auf den Rechner des Benutzers kopieren um sie anschliessend in Excel zu öffnen.
Zuletzt muss die geänderte Datei ja wieder zurück in die DB.

Woher weiss die Anwendung wann es soweit ist?
Einige Dateimanager ermöglichen es ja auch eine Datei z.B. aus einem Zip-Archiv zu entpacken, zu ändern und geändert in das Archiv zurückschreiben.

Oder ist mein Ansatz generell falsch?

Gruß
Thomas

3.728 Beiträge seit 2005
vor 13 Jahren

Hallo Tom2010,

Woher weiss die Anwendung wann es soweit ist?

Du könntest z.B. einen FileSystemwatcher verwenden, um Dich per Ereignis informieren zu lassen, wenn Änderungen in die Datei geschrieben werden.

Vielleicht macht der Benutzer Excel aber auch einfach zu, ohne was zu speichern?
Du musst dann auch den Prozess überwachen, der die Datei geöffnet hat.

Für Office-Anwendungen kannst Du mit VSTO Add-Ins schreiben, die Dein Dateiablagesystem dort integrieren (Das beim speichern z.B. nicht der Standard-Dateidialog kommt, sondern ein Formular von Dir, welches dem Benutzer ermöglicht die Speicherung auf Deinem Server vorzunehmen und gff. noch Metadaten einzugeben). Wenn Du allerdings beliebige Dateien verwalten willst, musst Du das doch wieder von außen Steuern können, da nicht jede Anwendung das Schreiben von Add-Ins unterstützt.

Oder ist mein Ansatz generell falsch?

Falsch vielleicht nicht, aber er hat Nachteile:*Office-Dokumente können relative Verweise auf andere Office-Dokumente/Dateien haben. Wenn aber jede Datei einzeln aus der DB in Tempo geholt wird, werden diese Verweise nicht mehr funktionieren. *An die Dokumente kommt man nur noch über Deine Software ran. Das macht es für andere Anwendungen - die keine Plug-In-Unterstützung haben - unmöglich auf die Dokumente zuzugreifen. Das ist eine große Einschränkung und hemmt die einfache Einführung neuer Anwendungen in die EDV-Landschaft. *Das NTFS-Rechtesystem greift nicht mehr. Du musst also ein eigenes Rechtesystem auf Basis der DB aufsetzen. Viel Arbeit, die nicht unbedingt nötig ist.

Wenn Du Dir dieser Nachteile bewusst bist und es triftige Gründe gibt das so zu machen (z.B. wenn die Client übers Internet mit dem Dateiablageserver kommunizieren), ist es okay.

Alternativ könntest Du die Dateien mit einer herkömmlichen Windows-Netzwerkfreigabe zugänglich machen und Metadaten zu den Dateien separat in einer DB speichern. Dann bleiben die Dateien mit herkömmlichen Mittel zugreifbar.

T
Tom2010 Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Hallo Rainbird,

vielen Dank für Deine ausführliche Antwort.
Den FileSystemwatcher habe ich inzwischen auch einmal angetestet, aber Du hast Recht, zufriedenstellend ist das nicht und an die Verweise im Dokument habe ich noch garnicht gedacht.

Momentan läuft die Geschichte über eine versteckte Freigabe mit Metadaten in der Datenbank. Files im Filestream des SQL-Servers sind zwar auch charmant, bieten mir aber im Bezug auf öffnen, bearbeiten und schließen wohl keine Vorteile.

Die versteckte Freigabe ist mir aber zu unsicher, da ja im Prinzip jeder der mit dem Programm arbeitet auch darauf zugreifen kann. Das Öffnen der Datei über einen anderen, berechtigten User (Impersonation) bietet zwar Schutz der Share aber nur zum öffnen.

Schwer schwer, offensichtlich muss ich den User auffordern das File lokal zu speichern über impersonation aus der Freigabe und selbst in der DB zurückspeichern...

Gruß
Th.

3.728 Beiträge seit 2005
vor 13 Jahren
NTFS Rechte automatisch setzen

Hallo Tom2010,

oder Du setzt die NTFS-Rechte auf dem Server automatisiert für jede Datei durch einen Windows-Dienst, der auf dem File Server läuft. Du musst die Dateien dann aber irgendwie kategorisieren, damit Du weisst, welche Datei welche NTFS-Rechte bekommt.

Außerdem müsstest Du auch was einbauen, um die Rechte bereits abgelegter Dateien nachträglich für eine ganze Kategorie auf einmal ändern zu können.

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

wäre somit für diesen Anwendungsfall WebDAV eine Alternative (so wie im Ursprungsthema angemerkt)?
Ich hab mir das nur mal kurz angeschaut deshalb kann ich die Vor- / Nachteile davon nicht gut abschätzen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.728 Beiträge seit 2005
vor 13 Jahren

wäre somit für diesen Anwendungsfall WebDAV eine Alternative (so wie im Ursprungsthema angemerkt)?

WebDAV hätte ein ähnliches Problem wie die DB-Speicherung, da nicht alle Windows-Anwendungen WebDAV unterstützen.

In Sachen Metadaten und Berechtigungen wäre mit WebDAV nicht viel gewonnen.

WebDAV hätte allerdings den Vorteil, dass auch Zugriff übers Internet möglich werde (SSL vorausgesetzt).

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo Rainbird,

danke für die Info.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
Tom2010 Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Ich habe mich kurz mit WebDAV, dem Aufsetzen des Servers und der Implementierung eines Clients in C# auseinandergesetzt. Das klappt eigentlich wunderbar, nur wie Rainbird schreibt, ist nicht viel gewonnnen.
Wenn ich nicht einen riesigen Overhead programmieren will, werde ich wohl nicht umherkommen das jeweilige File auf den Rechner des Users zu kopieren. Entweder total transparent d.h. der User weiss, dass er die Datei kopieren und zurüchschreiben muss oder aber mit FileSystemWatcher - mal schauhen...

Für diejenigen die über Suche "Webdav" in diesen Fred gekommen sind ein paar Links:

Heise:
Speicher im WWW WebDAV-Server unter XP/2000

CodeProject:
How to Download a File from a WebDAV Server in VB.NET
How to Upload a File to a WebDAV Server in VB.NET

Der Download in C#:

using System.IO;
using System.Net;

namespace Utilities {
	class WebDAV {
		public static void Load() {
			string src = @"http://vm-xp/data/test.txt";
			string dest = @"c:\webdavtest.txt";
			HttpWebRequest request = (HttpWebRequest)System.Net.HttpWebRequest.Create(src);
			request.Credentials = new NetworkCredential("username","password");
			request.Method = WebRequestMethods.Http.Get;
			request.SendChunked = true;
			request.Headers.Add("Translate: f");
			HttpWebResponse response = (HttpWebResponse)request.GetResponse();
			int byteTransferRate = 4096;
			byte[] bytes = new byte[byteTransferRate - 1];
			int bytesRead = 0;
			long totalBytesRead = 0;
			long contentLength = 0;
			long.TryParse(response.GetResponseHeader("Content-Length"),out contentLength);
			FileStream fs = new FileStream(dest,FileMode.OpenOrCreate);
			Stream s = response.GetResponseStream();
			do {
				bytesRead = s.Read(bytes,0,bytes.Length);
				totalBytesRead += bytesRead;
				fs.Write(bytes,0,bytesRead);
				}
			while(bytesRead > 0);
			s.Close();
			s.Dispose();
			fs.Close();
			fs.Dispose();
			response.Close();
			}
		}
	}