Как определить строку подключения для состояния сеанса в 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/