4

J'utilise le RedisSessionStateProvider en utilisant un procedimient comme celui-ci https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-session-state-caching/Comment définir la chaîne de connexion pour l'état de session dans Azure

Je la chaîne de définir la connexion à web.config, dans cet exemple est XXXXXX. Je ne veux pas mettre la chaîne de connexion dans le code source.

<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> 

Alors, comment puis-je utiliser les paramètres dans Azure pour définir cette chaîne de connexion? Je déploie à l'azur à partir de github, donc il utilise Kudu. Je n'ai pas de serveur CI externe.

Un conseil?

+0

Notez que les paramètres App Azure deviennent des variables d'environnement. Par conséquent, si l'entrée de configuration de la chaîne de connexion prend en charge l'expansion des variables d'environnement (par exemple, 'connectionString ="% MY_CONN_STRING% "'), vous pourrez peut-être effectuer ce travail. Ou peut-être existe-t-il une API qui vous permet de définir par programmation la chaîne conn, ce qui vous permet également de la définir à partir d'une variable d'environnement. Notez bien si c'est possible, mais juste quelques réflexions ... –

Répondre

3

Je l'ai ça :)

Pour ce faire, vous devez définir la chaîne de connexion en tant que variable d'environnement, et non en tant que chaîne de connexion typique. Et dans l'état de sesion, utilisez le nom de la variable d'environnement.

De cette façon:

<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> 

L'utilisation que vous pouvez maintenant définir la chaîne de connexion dans les Paramètres de l'application de SitesWeb Azure

+1

Voici une excellente ressource contenant tout ce que vous voulez pour savoir comment configurer redis comme ceci https://github.com/Azure/aspnet-redis-providers/wiki/Configuration – MPavlak

0

Jetez un oeil sur le blog de Scott Hanselman sur le sujet: http://www.hanselman.com/blog/HowToKeepYourASPNETDatabaseConnectionStringsSecureWhenDeployingToAzureFromSource.aspx

Vous pouvez stocker la chaîne de connexion à l'intérieur des paramètres de l'application dans le portail d'azur, puis les appeler à partir de votre application. Cela empêche la chaîne d'être contenue dans votre code source. Vous voudrez faire de même avec vos clés de stockage.

Dans le portail, accédez aux paramètres de votre application, puis sélectionnez "Paramètres de l'application". Faites défiler ce volet vers les chaînes de connexion.

Vérifiez la chaîne de connexion section de cette page ainsi: https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

+2

Cela ne répond pas à la question, cela fonctionne pour les chaînes de connexion standard et les paramètres, mais pas pour la chaîne de connexion dans l'état de session –

0

Je pense que IPartitionResolver peut venir sauver ici ...

Vous pouvez essentiellement créer une classe qui implémente l'interface et System.Web.IPartitionResolver spécifiez-le dans la configuration de l'état sessin dans web.config comme ceci

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

Et puis dans la classe y ous pouvez remplacer la chaîne de connexion

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

Je nai testé ceci, mais je crois que cela devrait fonctionner

En savoir plus sur

0

Si vous voulez juste être en mesure de fournir à votre chaîne de connexion à partir de votre code source , vous pouvez utiliser les settingsClassName et settingsMethodName propriétés dans la config, comme ceci:

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

ici, le settingsClassName est le nom d'une classe dans votre application, avec son espace de noms entièrement qualifié. Le nom settingsMethod est le nom de la méthode sur cette classe, qui doit être statique, prendre 0 paramètres et retourner une chaîne. Par exemple:

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

D'ici: https://github.com/Azure/aspnet-redis-providers/wiki/Configuration