0 votes

Chaîne de connexion conditionnelle basée sur le dossier dans lequel l'application est publiée

Je suis en train d'entrer dans une phase de test et de développement parallèle où j'ai besoin d'utiliser une base de données pour les tests et une autre pour le développement. Comment puis-je faire en sorte que l'application choisisse quelle chaîne de connexion mettre en œuvre en fonction du dossier physique dans lequel elle (l'application) se trouve?

Je sais qu'il y a des stratégies SVN à considérer, mais c'est à assez petite échelle pour éviter d'avoir 2 bases de code séparées. J'aimerais pouvoir publier le même projet VS dans l'un ou l'autre de mes 2 répertoires sans avoir à me rappeler de changer la chaîne de connexion.

Je fonctionne sous IIS7 donc peut-être offre-t-il un meilleur contrôle que les conditionnels dans (et les remplacements de) web.config. (ou pas)

merci!

2voto

Mike Hofer Points 6559

Un conseil :

Je ne baserais pas votre chaîne de connexion sur votre dossier publié. En cours de route, le dossier pourrait changer, et les gens pourraient ne pas être au courant que cela détermine quelle chaîne de connexion vous utilisez.

A la place, contrôlez-le avec un paramètre dans votre fichier web.config. Ajoutez simplement un paramètre qui vous permet de basculer entre les bases de données de production et de développement. En fait, vous pourriez simplement tester la présence d'un paramètre de mode debug. Si ce paramètre est là, vous ciblez la base de données de développement; sinon, vous ciblez la production.

La bonne chose à propos de cette solution est qu'elle ne dépend pas d'où vous déployez le site, et vous pouvez documenter le paramètre dans le fichier Web.config.

J'espère que cela vous aide.

Modification pour plus de clarté : Par "un paramètre de mode debug" je veux dire un paramètre qui détermine quelle base de données vous ciblez, dev/production. Pas que votre application s'exécute en mode Debug, puisque le Framework fournit déjà une fonction pour cela. De plus, vous ne supprimeriez pas nécessairement le paramètre, car vous voudriez le conserver à des fins de documentation. Plutôt, vous le mettriez en commentaire.

0voto

marc_s Points 321990

Vous pourriez par exemple créer un conteneur qui contient une chaîne de connexion pour chaque dossier dans lequel votre application pourrait se trouver :

  ....

et ensuite il suffit de choisir la bonne, en fonction de l'endroit où votre application démarre.

Marc

0voto

Guffa Points 308133

Obtenez une chaîne unique pour l'application, peut-être quelque chose comme :

chaîne dossier = Regex.Match(Server.MapPath("~"), @"\(.+?)\$").Groups[0].Value;

Ensuite, utilisez la chaîne pour obtenir une valeur à partir du fichier web.config :

ConnectionStringSetting chaîneDeConnexion = ConfigurationManager.ConnectionStrings["ConnexionChaîne." + dossier] ?? ConfigurationManager.ConnectionStrings["ConnexionChaîne"];

Dans le fichier web.config, vous pouvez ajouter plusieurs chaînes de connexion avec les noms des dossiers ajoutés pour chaque site de développement, ainsi qu'une chaîne de connexion par défaut avec juste le nom et aucun dossier.

0voto

Fredrik Mörk Points 85694

Je mets généralement les chaînes de connexion dans un fichier de configuration séparé et je les référence à partir du web.config principal en utilisant configSource:

Dans web.config:

Dans connections.config:

Une fois déployé, j'exclus généralement connections.config des déploiements futurs (sauf s'il doit être modifié, bien sûr).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X