Надежное кэширование XML-канала из веб-службы в файл - PullRequest
0 голосов
/ 16 марта 2009

Мне нужно кэшировать некоторое количество XML из веб-сервиса в локальный файл XML для использования моим веб-приложением.

Существует два веб-сервиса: один возвращает данные, а второй возвращает дату / время последнего изменения данных.

Размер файла xml может варьироваться от 50 КБ до 500 КБ

В настоящее время у меня есть исполняемый файл, который запускается из планировщика Windows, который выполняет следующее.

  • Проверьте дату и время последнего изменения из WebService
  • Проверка даты и времени, когда локальный XML-файл DateTime был изменен в последний раз
  • Сравните даты, чтобы определить, продолжить ли
  • Извлечь данные из веб-сервиса в локальную строку
  • Запись данных в локальный файл myxml.temp
  • Переименуйте существующий живой файл myxml.xml в myxml.delete
  • Переименуйте файл myxml.temp в myxml.xml
  • Удалить файл myxml.delete

Я выполняю начальную запись, используя FileInfo.CreateText () и TextWriter.

Я выполняю переименования и удаления, используя FileInfo.MoveTo и FileInfo.Delete.

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

Есть ли у кого-нибудь совет относительно более надежного / надежного способа сделать это? Есть ли что-то встроенное, что я мог упустить из-за управления локальным файлом, подобным этому?

1 Ответ

2 голосов
/ 16 марта 2009

Одним из вариантов может быть просто загрузить каждое обновление в новое имя файла с отметкой времени в имени файла

C: \ загрузки \ MyXml20090319-1035.xml

Затем в приложении, использующем данные, вам нужно выбрать самый последний файл из этого каталога.

Вы можете очистить старые файлы данных в любой момент, и если они не удаляются сейчас, просто повторите попытку на следующей итерации.

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