Hallo,
folgendes Szenario:
In einer Consolen Anwendung die durch einen Scheduled Task getriggert wird,
schreibe ich in regelmässigen Abständen ein XML file auf Platte.
Parallel dazu greift eine ASP.NET Anwendung gelegentlich auf dieses File zu.
Das Problem ist nun - scheint mir auch irgendwo plausibel - dass durch den Lesezugriff der ASP.NET Anwendung das File wohl blockiert ist; d.h. ich kann im nächsten Zyklus des Scheduled Task das File nicht überschreiben.
Welche Möglichkeiten seht ihr hier, dieses Problem zu umschiffen?
Gibt es eine sinnvolle Möglichkeit das File explizit freizugeben? Die Zugriffe sind alle unter Verwendung eines using(...) gewrappt.
Grüße, ltrader
Real programers do not comment their code.
It is hard to write and it should be hard to understand!
Hallo ltrader,
erster Ansatz: Richtigen FileShare-Modus wählen.
zweiter Ansatz: Zugriffe synchronisieren.
herbivore
Hallo herbivore,
folgendermassen greife ich beim Lesen auf das File zu:
using (FileStream lStream = new FileStream(iConfigPath,FileMode.Open,FileAccess.Read))
{
}
Ich ging davon aus, dass das mit Hilfe von using aufgerufenen Dispose()
Die Ressource wieder freigibt.
Das Schreiben mache ich über einen StreamWriter
using (StreamWriter lStreamWriter = new StreamWriter(lTempPath))
wobei ich ein Stück weiter unten as File folgendermassen kopiere:
File.Move(lTempPath, lCurrencPath);
Ich wüsste nicht, was hier augenscheinlich verkehrt sein könnte..
Gruß, ltrader
Real programers do not comment their code.
It is hard to write and it should be hard to understand!
Es geht hier nicht um die Ressourcen, sondern darum, das das File normalerweise nur von einem Process gleichzeitig geöffnet werden kann.
Falls du im langen Post von herbivore etwas übersehen hast 😉:
Richtigen FileShare-Modus wählen.
Also
FileStream lStream = new FileStream(iConfigPath, FileMode.Open, FileAccess.Read, FileShare.Read);
Wichtig ist die letzte Zeile.
Hallo ltrader,
so wie ich es verstanden habe, liegt das Problem in dem parallelen Zugriff durch die ASP.NET Anwendung.
herbivore
Hallo ihr zwei,
genau der parallele Zugriff sollte das Problem sein..
Sicher. Die Lösung die ihr aufzeigt liegt mir jetzt auf der Hand. Manchmal sieht man den Wald vor lauter Bäumen nicht 😉
Ich probiere das mal. Sollte ja hinhauen..
Grüße und danke , ltrader
Real programers do not comment their code.
It is hard to write and it should be hard to understand!