PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [AsP.NET] Textdatei Zugrifff aus verschiedenen Sessions


Hardwaretoaster
2009-08-15, 11:21:55
Ich schreibe potentiell aus verschiedene Sessions etwas raus (eine Art Mini-Logging). Da kann es natürlich passieren, dass mal zwei gleichzeitig schreiben wollen (die Reihenfolge wie geschrieben wird ist für den Fall egal).

Nun kenne ich mich nich nicht so aus: Ich könnte Fileshare beim schreiben auf none, dann gehen können die anderen aber vermutlich gar nicht schreiben.
Was ich bräuchte wäre so 'ne Art Monitor, damit die anderen Sessions kurz warten und dann ihre Zeile dranhängen.

Gibt's da was aus dem Framework, was ich übersehe, was mir da Arbeit abnimmt?

AtTheDriveIn
2009-08-15, 11:33:20
Eignen sich dazu nicht die Application Objekte? Die liefern doch Lock Funktionalität gleich mit.


[C#]
Application.Lock();
((MyFileWriter)Application["LogWriter"]).write("blablabla");
Application.Unlock();

Hardwaretoaster
2009-08-15, 13:13:54
Eignen sich dazu nicht die Application Objekte? Die liefern doch Lock Funktionalität gleich mit.


[C#]
Application.Lock();
((MyFileWriter)Application["LogWriter"]).write("blablabla");
Application.Unlock();

Hm, kann sein,muss ich mal probieren.
Die Mittlere Zeile ist nur, weil der Writer im ApplicationState ist?

AtTheDriveIn
2009-08-16, 10:05:00
Hm, kann sein,muss ich mal probieren.
Die Mittlere Zeile ist nur, weil der Writer im ApplicationState ist?

Ja genau. Das ist einfach das Ansprechen der Write-Methode des im Application State gespeicherten Objektes, was man sich zum Log-Datei Handling gebaut hat.


Das Objekt lässt sich von allen Session aus ansprechen und mit Lock() stellst du eben Zugriffssynchronisation sicher.

.NET entfernt übrigens den Lock() automatisch wieder falls Fehler auftreten. Deine Anwendung kann also nicht in ein Deadlock fahren.

Hardwaretoaster
2009-08-16, 22:20:12
Ja genau. Das ist einfach das Ansprechen der Write-Methode des im Application State gespeicherten Objektes, was man sich zum Log-Datei Handling gebaut hat.


Das Objekt lässt sich von allen Session aus ansprechen und mit Lock() stellst du eben Zugriffssynchronisation sicher.

.NET entfernt übrigens den Lock() automatisch wieder falls Fehler auftreten. Deine Anwendung kann also nicht in ein Deadlock fahren.

Das klingt gut. Morgen früh gleich mal alles ausprobieren.