2014-10-10 4 views
0

У нас есть коллекция веб-сервисов VB.NET/IIS на некоторых наших серверах, и у них есть файлы web.config в корневых каталогах веб-сайтов, которые они 'уже считывает конфигурации из. Существует новая конфигурация, которую нужно добавить, которая будет сразу немного больше, чем другие, и она будет расти только. Это, по сути, значение, разделенное запятыми, и я хочу сохранить его в определенном файле конфигурации.web.config против текстового файла для хранения значения, разделенного запятой

Сначала я начал делать это с помощью текстового файла, но возникла проблема с этим. Содержимое текстового файла может измениться, когда потоки веб-сервисов и процессы запущены, поэтому им необходимо существенно перечитать файл каждый раз, когда им нужно получить доступ к его значениям. Я думал об использовании какого-то кеширования, но если веб-службы не будут полностью перезагружены каждый раз, когда файл будет обновлен, кеширование будет блокировать обновление файла сразу же. Но чтение из текстового файла каждый раз медленное ...

Затем появилась идея поместить это значение в web.config вместе с другими конфигурациями, которые службы уже используют. Когда web.config изменен, изменения могут быть кэшированы в коде, а не сразу вступать в игру. Однако web.config, ну, web.config, и это не полностью тривиальный текстовый файл, который просто считывается из кода. IIS обрабатывает web.config особым образом.

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

Каковы последствия хранения в файле web.config возможно более длинного значения, разделенного запятыми, а не в его собственном маленьком текстовом файле? Является ли файл особенно хорошей или плохой идеей? Для меня кажется, что web.config будет легко уживаться, не перечитывая файл снова и снова, но, конечно же, есть нечто большее, чем обычный пользователь. Благодаря!

+1

часто ли это изменение данных? Если это так, web.config будет плохой идеей. Каждый раз, когда изменяется web.config, пул приложений перерабатывается. – Namrehs

+0

@Namrehs Вероятно, у него мало шансов, как часто он меняется, но большую часть времени он должен быть довольно стабильным. – Panzercrisis

+1

@Namrehs Это просветление. Вы хотите использовать это как ответ? – Panzercrisis

ответ

1

Я рекомендую использовать кэш приложений для этого:

http://msdn.microsoft.com/en-us/library/vstudio/6hbbsfk6(v=vs.100).aspx

+0

Немного информации для других людей: пары ключ-значение в объекте Cache могут быть установлены как недействительные, как только будет изменен данный файл. Объедините это с помещением списка, разделенного запятыми, в текст или файл csv, и вы получите довольно близкий к лучшему из всех миров. Значения кэшируются до тех пор, пока файл не будет снова изменен, тогда их можно будет повторно применить немедленно, у вас нет постоянного чтения файла, пул приложений не будет переработан и т. Д. Единственное предостережение в том, что вы можете иметь чтобы полностью квалифицировать имя ссылки на объект Cache ... – Panzercrisis

+0

... Вместо того, чтобы просто говорить «Cache (« myKey »)', как и их документация, вам может потребоваться сказать «System.Web.HttpContext.Current» .cache ("MYKEY") '. Другой способ - сохранить ссылку на «System.Web.HttpContext.Current.Cache», так что вам не нужно вводить так много каждый раз - необязательно вызывать свою ссылку сам «Cache». – Panzercrisis

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