Как синхронизировать доступ к файлу между веб-сайтом ASP.NET и веб-службой ASP.NET на одном веб-сервере - PullRequest
1 голос
/ 14 октября 2008

Я развернул веб-сайт ASP.NET и веб-службу ASP.NET на одном веб-сервере. Оба они требуют доступа к общему файлу.

Как реализовать / поделиться блокировкой, которая поддерживает одного писателя и нескольких читателей? Если кто-то читает, никто не может писать, но все еще могут читать. Если кто-то пишет, никто не может читать / писать.

Ответы [ 3 ]

2 голосов
/ 14 октября 2008

, чтобы открыть файл для записи, разрешив другим потокам читать его, используя метод System.IO.File.Open с System.IO.FileShare.Read. Ie.:

System.IO.File.Open("path.txt",System.IO.FileMode.OpenOrCreate,System.IO.FileAccess.ReadWrite,System.IO.FileShare.Read)

Другие (читающие) темы должны использовать System.IO.FileAccess.Read

Подпись открытого метода:

public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);

UPDATE Если вам нужны все экземпляры, иногда пишите в файл. Используйте класс Mutex для резервирования записи в файл. Ie.:

    Mutex mut = new Mutex("filename as mutex name");
    mut.WaitOne();
    //open file for write, 
    //write to file
    //close file
    mut.ReleaseMutex();

Надеюсь, это поможет.

1 голос
/ 21 октября 2008

Используйте класс ReaderWriterLock или ReaderWriterLockSlim (.NET 2.0) из пространства имен System.Threading для обработки случаев одного записывающего / нескольких читателей.

0 голосов
/ 14 октября 2008

Ну, вы можете сделать что-то вроде этого:

public class yourPage {
    static object writeLock = new object();
    void WriteFile(...) {
         lock(writeLock) {
              var sw = new StreamWriter(...);
              ... write to file ...
         }
}

По сути, это решение подходит только для случаев, когда файл будет открыт для записи на короткий промежуток времени. Вы можете рассмотреть возможность кэширования файла для читателей или записи файла во временный файл, а затем переименовать его, чтобы минимизировать конфликты по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...