Как определить строку подключения для состояния сеанса в Azure

Я использую RedisSessionStateProvider используя процедуру, подобную этой https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-session-state-caching/

Я определяю его строку подключения в web.configв этом примере XXXXXX,

 <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.5" />
    <globalization culture="es-CO" uiCulture="es" />
    <customErrors mode="Off" />
    <sessionState mode="Custom" customProvider="SessionStateStore">
      <providers>
        <add name="SessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="XXXXXX" throwOnError="true" applicationName="NominappSession" />
      </providers>
    </sessionState>
  </system.web>

Я не хочу помещать строку подключения в исходный код. Итак, как я могу использовать параметры в Azure для определения этой строки подключения?

Я развернул в Azure от GitHub, поэтому он использует Kudu. У меня нет внешнего CI-сервера.

Любой совет, пожалуйста?

4 ответа

Решение

Я это сделал:)

Для этого вам нужно определить строку подключения как переменную среды, а не как типичную строку подключения. А в состоянии sesion укажите имя переменной окружения.

Сюда:

  <appSettings>
    <add key="REDIS_CONNECTION_STRING" value="redis,allowAdmin=true" />
  </appSettings>
  <system.web>
    <sessionState mode="Custom" customProvider="SessionStateStore">
      <providers>
        <add name="SessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="REDIS_CONNECTION_STRING" applicationName="REDIS_SESSION_APPLICATION_NAME" throwOnError="true" />
      </providers>
    </sessionState>
  </system.web>

Используя это, вы теперь можете определить строку подключения в настройках приложения веб-сайтов Azure.

Если вы просто хотите предоставить строку подключения из исходного кода, вы можете использовать settingsClassName а также settingsMethodName свойства в конфиге, вот так:

 <sessionState mode="Custom" customProvider="RedisSessionStateStore">
  <providers>
      <add
        name="RedisSessionStateStore"
        type="Microsoft.Web.Redis.RedisSessionStateProvider"
        settingsClassName="MyApp.SessionStateRedisSettings,MyApp"
        settingsMethodName="ConnectionString" />
  </providers>

Здесь settingsClassName - это имя класса в вашем приложении с его полностью определенным пространством имен. Имя settingsMethod - это имя метода в этом классе, которое должно быть статическим, принимать 0 параметров и возвращать строку. Например:

namespace MyApp
{
    public static class SessionStateRedisSettings
    {
        public static string ConnectionString()
        {
            return "ConnectionString goes here";
        }
    }
}

Отсюда: https://github.com/Azure/aspnet-redis-providers/wiki/Configuration

Я думаю, что IPartitionResolver может прийти сюда, чтобы спасти...

Вы можете в основном создать класс, который реализует System.Web.IPartitionResolver интерфейс и укажите его в конфигурации состояния sessin в web.config, как это

<sessionState mode="Custom"  partitionResolverType="WebAppConnectionStringResolver">

И тогда в классе вы можете переопределить строку подключения

public class WebAppConnectionStringResolver : System.Web.IPartitionResolver
{
   public void Initialize()
   {

   }

   public string ResolvePartition(object key)
   {
     return System.Configuration.ConfigurationManager.ConnectionStrings["your_Conn_string_name_in_portal"]
   }
}

Я не проверял это, но я считаю, что это должно работать

Узнайте больше на

Взгляните на блог Скотта Хансельмана по этой теме: http://www.hanselman.com/blog/HowToKeepYourASPNETDatabaseConnectionStringsSecureWhenDeployingToAzureFromSource.aspx

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

На портале зайдите в настройки вашего приложения и выберите "Настройки приложения". Прокрутите вниз на этой панели до Строки подключения.

Также ознакомьтесь с разделом строк подключения на этой странице: https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/