2012-01-04 1 views
1

У меня есть программа, которая перезаписывает определенный набор файлов, необходимых для моего веб-сайта, однако трафик на моем веб-сайте увеличился настолько, что теперь я получил файл ошибки. Который приводит к тому, что он не может обновить файл.C# перезаписать файл, файл ошибки, используемый IIS 7.5

Эта программа работает каждые 5 минут, чтобы обновить указанные файлы.

Причина, по которой я разрешаю этой программе обрабатывать запись файла, а не программу, потому что мне также необходимо обновить его до другого веб-сервера (через ftp). таким образом, я также гарантирую, что файл обновляется каждые 5 минут, а не когда пользователь будет просматривать страницу.

Мой вопрос поэтому есть; Могу ли я сообщить IIS7.5 о кэшировании файла после (скажем, от 5 секунд до 1 минуты), он был обновлен? Это должно гарантировать, что в следующий раз, когда программа запускает обновление файла, он не столкнется с какими-либо проблемами.

+0

Использование 'блокировки()' в вашем коде. –

+0

Можете ли вы использовать FileSystemWatcher, чтобы сигнализировать, когда файл обновляется, и в это время вы сможете создать копию и прочитать ее до тех пор, пока не будет указано следующее обновление. – Lloyd

+0

Этот файл находится на сервере IIS, и он также используется этим сервером. Следовательно, он «используется». Я также уверен, что FileSystemWatch не будет иметь никакого эффекта, поскольку мы говорим о сервере IIS, нуждающемся в проверке обновлений и chache файла. – Raskaroth

ответ

1

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

Но если вы не можете использовать базу данных, я бы взял другой подход, сохранил содержимое файла в System.Web.Caching.Cache со временем, когда это было последним, а затем проверьте, не изменился ли файл, если не используется кешированная версия, и если был изменен, сохраните новое содержимое и время в одной и той же переменной кэша.

Конечно, вам нужно будет проверить, можете ли вы прочитать файл, и только затем обновить содержимое кеша, и если вы не можете прочитать файл, вы можете просто получить последнюю версию из кеша.

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

Лучший способ проверить, что вы можете прочитать из файла, чтобы поймать исключение, потому что блокировка может произойти после проверки, увидеть этот пост: How to check for file lock?

+0

hmm хорошо, ну, программа получает часть информации из базы данных. причина, по которой я использую эту программу, заключается в том, чтобы обманывать файлы на другом веб-сервере, хотя это происходит через ftp без каких-либо проблем. Я просто получаю данные из базы данных прямо для iis-сервера. Благодаря! – Raskaroth

Смежные вопросы