如何在Azure中为会话状态定义连接字符串

时间:2016-02-20 21:09:09

标签: azure azure-web-sites stackexchange.redis azure-web-app-service session-state-provider

我正在使用RedisSessionStateProvider这样的程序使用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>

react-native-redux-router

我不想把连接字符串放在源代码中。那么我如何使用Azure中的设置来定义此连接字符串?

我从github部署到azure,所以它使用Kudu。我没有外部CI服务器。

请问任何建议?

4 个答案:

答案 0 :(得分:7)

我做到了:)

为此,您需要将连接字符串定义为环境变量,而不是典型的连接字符串。并且在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网站的应用程序设置中定义连接字符串

答案 1 :(得分:4)

如果您只想提供源代码中的连接字符串,可以使用配置中的settingsClassNamesettingsMethodName属性,如下所示:

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

在这里,settingsClassName是应用程序中具有完全限定名称空间的类的名称。 settingsMethod name是此类上方法的名称,必须是static,取0参数并返回一个字符串。例如:

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

从这里开始:https://github.com/Azure/aspnet-redis-providers/wiki/Configuration

答案 2 :(得分:0)

看看Scott Hanselman关于这个主题的博客: http://www.hanselman.com/blog/HowToKeepYourASPNETDatabaseConnectionStringsSecureWhenDeployingToAzureFromSource.aspx

您可以将连接字符串存储在azure门户中的应用程序设置中,然后在应用程序中调用它们。这可以防止字符串包含在源代码中。您也希望对存储密钥执行相同的操作。

在门户网站中,转到您应用的设置,然后选择&#34;应用程序设置&#34;。在该窗格中向下滚动到Connection Strings。

查看本页的连接字符串部分: https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

答案 3 :(得分:0)

我认为 IPartitionResolver 可以来这里救援......

你基本上可以创建一个实现System.Web.IPartitionResolver接口的类,并在web.config中的sessin状态配置中指定它,因为这个

<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"]
   }
}

我没有测试过这个,但我相信这应该有用

了解更多信息