Изменение значения Web.Config SessionTimeout из приложения - PullRequest
2 голосов
/ 02 июня 2011

Я пытаюсь найти способ динамического изменения времени ожидания сеанса, так как мой клиент попросил, чтобы это значение можно было легко изменить (как если бы это была транзакция базы данных).Вот усеченная версия значения, которое я пытаюсь изменить:

<appSettings>
   <add key="SessionTimeout" value="20"/>
</appsettings>

Я работаю с C # /. Net 3.5 со всем этим.

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

Проблема в том, что я понятия не имею, как это сделать, или если это вообще возможно (тем более, хорошая идея).Я дал Google прогон и ничего не придумаю.

Есть ли способ внести эти изменения или даже потенциально динамически изменить время ожидания на лету (переопределяя содержимое web.config)?

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 02 июня 2011

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

После того, как ваши разрешения и т. Д. Разобраны, ниже приведен быстрый способ сделать это.

public void EditMyWebConfig(string appSettingsKey, string appSettingsValue, string         filePath)
    {
        XmlDocument xml = new XmlDocument();
        //Load current config into memory
        xml.Load(filePath);
        //Overwrite config
        using(FileStream fs = new FileStream(filePath, FileMode.Create,FileAccess.ReadWrite))
        {
            //select appSetting you want to edit
            XmlNode xmlN = xml.SelectSingleNode("//configuration/appSettings/add[@key = '" + appSettingsKey + "']");
            //assign new value
            xmlN.Attributes["value"].Value = appSettingsValue;
            //Create new web config
            xml.Save(fs);
        }
    }

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

1 голос
/ 02 июня 2011

Расширение времени ожидания из кода, где это необходимо:

Session.Timeout = 40;

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

1 голос
/ 02 июня 2011

Вместо того, чтобы пытаться изменить web.config, как насчет изменения Session.Timeout в коде во время выполнения?

Подробнее:

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout.aspx

...