2017-06-06 4 views
0

Ich verwende die verwaltete Klasse ESENT PersistentDictionary, um meine C# -Anwendung zum Speichern von Daten auf einer Netzwerkfreigabe zu erhalten. Es funktioniert alles gut, mit einem Vorbehalt. Wenn ich versuche, von mehreren Client-Computern aus auf die Datenbank zuzugreifen (alle laufen auf meiner App), erhalte ich manchmal eine Ausnahme mit der Meldung "Systempfad, der bereits von einer anderen Datenbankinstanz verwendet wird".Gleichzeitiger Zugriff auf ESENT PersistentDictionary

Aus der Dokumentation, ich sammle als ESENT unterstützt Nebenläufigkeit, so sollte dies kein Problem sein. Was mache ich falsch?

Vielen Dank.

Antwort

1

Es gibt ein kleines Missverständnis. ESENT unterstützt Multi-Thread-Concurrency, aber nicht Multiprozess-Concurrency. esent.dll öffnet die Datei ausschließlich, so dass jeder andere Prozess ACCESS_DENIED erhalten wird (mit Ausnahme des schreibgeschützten Modus - mehrere Prozesse können eine Datenbank im schreibgeschützten Modus öffnen).

Darüber hinaus ist die Dateisperre über SMB nicht ganz so starr wie bei einem lokalen Dateisystemzugriff, und auch das Caching-Verhalten ist anders. Es wird nicht empfohlen, dass Sie eine Datenbank auf einer Remote-SMB-Freigabe haben, obwohl Sie im wirklichen Leben wahrscheinlich kein Problem damit haben werden. (Und einige dieser Anleitungen basierten auf älteren Versionen von SMB. Neuere Versionen haben möglicherweise die Implementierungsdetails so geändert, dass sie perfekt funktionieren - ich denke, ich weiß einfach nicht genug. :)

Um zu haben Multi-Machine-Zugriff, müssen Sie Ihren eigenen Serverprozess schreiben, um Anfragen von anderen Rechnern zu bearbeiten. Es tut uns leid.

-martin

+0

Vielen Dank. Dies verdeutlicht viele Dinge. – CesarGon

Verwandte Themen