Облачная служба Azure - настройка сеанса из среды RoleEnvironment - PullRequest
0 голосов
/ 16 ноября 2018

Наше приложение размещается как облачная служба в Azure, и у нас есть все строки подключения и другие параметры подключения, определенные в файлах ServiceConfiguration.Мы также используем Redis Cache в качестве хранилища состояний сеанса.Мы пытаемся указать хост и ключ доступа Redis Cache в ServiceConfig, а затем использовать эти значения для развертывания в зависимости от места расположения битов.Проблема в том, что сессия определена в web.config, и мы не можем вставить настройки RoleEnvironment в web.config.

Мы попытались изменить web.config в методе Application_Startup, но при запуске получили ошибки, из-за которых доступ к web.config запрещен, что имеет смысл.

На самом деле мы не хотим писатьсценарии развертывания для предоставления пользователю сетевой службы доступа к web.config.

Есть ли способ настроить сеанс для использования другого кэша Redis во время выполнения приложения?

enter image description here

Ошибка, которую мы получаем: «Доступ к пути E: \ sitesroot \ 0 \ web.config« запрещен ». Я прочитал статью, в которой приведены некоторые примеры того, какпредоставить пользователю сетевой службы доступ к web.config как часть процесса запуска роли, и сделал это, и теперь у нас есть доступ к файлу, но теперь появляется следующая ошибка: «Невозможно сохранить конфигурацию в файл» E: \ sitesroot \ 0\ web.config ".

1 Ответ

0 голосов
/ 14 декабря 2018

Мы смогли решить эту проблему с помощью API ServerManager в методе WebRole.OnStart.Мы сделали что-то вроде этого:

using (var server = new ServerManager())
{    
    try
    {
        Site site = server.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
        string physicalPath = site.Applications["/"].VirtualDirectories["/"].PhysicalPath;
        string webConfigPath = Path.Combine(physicalPath, "web.config");

        var doc = System.Xml.Linq.XDocument.Load(webConfigPath);

        var redisCacheProviderSettings = doc.Descendants("sessionState").Single().Descendants("providers").Single().Descendants("add").Single();

        redisCacheProviderSettings.SetAttributeValue("host", RoleEnvironment.GetConfigurationSettingValue("SessionRedisCacheHost"));
        redisCacheProviderSettings.SetAttributeValue("accessKey", RoleEnvironment.GetConfigurationSettingValue("SessionRedisCacheAccessKey"));
        redisCacheProviderSettings.SetAttributeValue("ssl", "true");
        redisCacheProviderSettings.SetAttributeValue("throwOnError", "false");

        doc.Save(webConfigPath);
    }
    catch (Exception ex)
    {
        // Log error
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...