Autor Beitrag
xingelxangel
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 11.11.09 12:12 
Hallo zusammen,

ich hab zwei Dienste geschrieben. Die grobe Funktionsweise: Das erste Programm holt sich bestimmte Werte von einem Server und speichert diese in einer Datensenke (einfaches serialisiertes Object). Dies geschieht je nach eingestellter Wiederholrate mehr oder minder oft. (Mindestwert: 1Sekunde).
Nach einer bestimmten Zeit meldet nun der zweite Dienst an den Ersten, dass er neue Daten braucht. Dies geschieht mit Hilfe einer leeren Textdatei. Nicht so schön, aber es funktioniert. Erfolgt diese Meldung, so soll der erste Dienst seine Datensenke in ein anderes Verzeichnis kopieren. Aber natürlich trotzdem auf der Datensenke weiterhin Daten sammeln.

Das funktioniert soweit auch ganz gut. Aber nach einer nicht reproduzierbaren Zeit, beendet sich der erste Dienst mit einer Fehlermeldung. Den genauen Wortlaut weiß ich gerade nicht, aber ungefähr:
Zitat:
Der Prozess ganz auf die Datei (meine Datensenke) nicht zugreifen, da diese von einem anderen Prozess verwendet wird.


Das kann aber nicht sein, da der erste Dienst sowohl in die Datensenke schreibt, als auch den Kopiervorgang durchführt. Meine Vermutung ist, dass meine Methode zum kopieren falsch ist. Hier der Code
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 FileStream sourceStream = new FileStream(sourceBuffer, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                FileStream targetStream = new FileStream(targetBuffer, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                byte[] streamBuffer = new Byte[sourceStream.Length];

                sourceStream.Read(streamBuffer, 0, streamBuffer.Length);
                targetStream.Write(streamBuffer, 0, streamBuffer.Length);

                sourceStream.Close();
                targetStream.Close();


Darum ist natürlich ein try-catch-block.

Nun zu meiner eigentlich Frage. Gibt es eine Möglichkeit, diesen Kopiervorgan eventuell etwas "schöner" zu gestalten und so zu gestalten, dass es nicht mehr zu dieser Fehlermeldung kommt?

Falls wichtig: Beide Dienste laufen unter dem LocalSystem User und der erste Dienst holt jede Sekunde Daten vom Server und der zweite Dienst fordert alle 7-15 Sekunden (je nach EInstellung) eine solche Kopie des ersten Services an.

mfg
xixa