У меня есть сценарий, в котором мы поддерживаем файл тарифов (.xml), который является доступом трех разных приложений, работающих на 3 разных серверах. Все 3 приложения используют RateMaintenance.dll, который имеет менее 4 методов Load, Write, Read и Close.C# Чтение/запись файла из нескольких приложений
Все 3 приложения записываются в файл непрерывно, и поэтому я добавил Monitor.Enter и Monitor.Exit механизм, предполагающий, что эти 3 операции из 3 разных приложений не будут сталкиваться. Но в этот момент, в некоторых случаях, я получаю ошибку - «Не удалось открыть файл тарифов«
По моему пониманию, это означает, что по какой-то причине приложение 3 пытается получить доступ к тому же самому. Не могли бы вы предложить, как справиться с таким сценарием?
Monitor.Enter(RatesFileLock);
try
{
//Open Rates file
LoadRatesFile(false);
//Write Rates into file
WriteRatesToFile();
//Close Rates file
CloseRatesFile();
}
finally
{
Monitor.Exit(RatesFileLock);
}
Метод подписи load-
LoadRatesFile(bool isReadOnly)
Для открытия файл-
new FileStream(RatesFilePath,
isReadOnly ? FileMode.Open : FileMode.OpenOrCreate,
isReadOnly ? FileAccess.Read : FileAccess.ReadWrite,
isReadOnly ? FileShare.ReadWrite : FileShare.None);
.... remaining Rates reading logic code here
для чтения Цены от
file-Rates = LoadRatesFile(true);
для написания ставок во Файл-
if (_RatesFileStream != null && _RatesInfo != null && _RatesFileSerializer != null)
{
_RatesFileStream.SetLength(0);
_RatesFileSerializer.Serialize(_RatesFileStream, _RatesInfo);
}
В заключительном файле
ме- _RatesFileStream.Close();
_RatesFileStream = null;
Я надеюсь, я пытаюсь объяснить мой сценарий в деталях. Пожалуйста, дайте мне знать на всякий случай.
Что в вашем трассировки стека? Вероятно, вы говорите, что «файл используется другим процессом»? – tier1
Также имейте в виду, что каждый запущенный процесс будет иметь свой собственный экземпляр «RatesFileLock». – tier1
да ... я понимаю это. Эта ошибка возникает один раз в месяц, поэтому не удается собрать трассировку стека. но, безусловно, это проблема с открытием файла, поскольку он используется другим приложением. как я могу это преодолеть? – Sagar