1

mon application ASP.NET lit un fichier xml pour déterminer l'environnement dans lequel elle se trouve actuellement (par exemple, local, développement, production).Avantages/inconvénients de lire la chaîne de connexion du fichier physique par rapport à l'objet Application (ASP.NET)?

Il vérifie ce fichier à chaque fois unique, il ouvre une connexion à la base de données, afin de savoir quelle chaîne de connexion pour saisir des paramètres de l'application.

J'entre dans une phase de développement où l'efficacité devient une préoccupation. Je ne pense pas que ce soit une bonne idée d'avoir à lire un fichier sur un disque physique chaque fois que je souhaite accéder à la base de données (très souvent).

Je considérais stocker la chaîne de connexion dans la demande [ « ConnectionString »]. Ainsi, le code serait

public static string GetConnectionString 
     { 
      if (Application["ConnectionString"] == null) 
      { 
       XmlDocument doc = new XmlDocument(); 
       doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/ServerEnvironment.xml"); 
       XmlElement xe = (XmlElement) xnl[0]; 

       switch (xe.InnerText.ToString().ToLower()) 
       { 
        case "local": 
         connString = Settings.Default.ConnectionStringLocal; 
         break; 

        case "development": 
         connString = Settings.Default.ConnectionStringDevelopment; 
         break; 

        case "production": 
         connString = Settings.Default.ConnectionStringProduction; 
         break; 

        default: 
         throw new Exception("no connection string defined"); 
       } 
       Application["ConnectionString"] = connString; 
      } 
      return Application["ConnectionString"].ToString(); 
     } 

Je n'ai pas concevoir l'application, donc je comprendre qu'il doit y avoir une raison pour lire le fichier xml à chaque fois (pour modifier les paramètres pendant l'exécution de l'application?) J'ai très peu notion du fonctionnement interne ici. Quels sont les avantages et inconvénients? Pensez-vous que je verrais un petit gain de performance en implémentant la fonction ci-dessus?

MERCI

+0

S'il y a une raison de garder le fichier XML, vous pouvez toujours ajouter le document analysé au cache pour éliminer les problèmes de performance qui pourraient venir de lui. Et, cela n'ajoutera pas autant de code. De plus, si vous créez également une dépendance de cache sur le fichier (fonctionnalité incluse), l'élément de cache expirera automatiquement si le fichier est modifié. –

Répondre

7

Wow. Jetez ça dans la poubelle.

Tous les fichiers .config (web ou app.config) ont une section dédiée aux chaînes de connexion et peuvent être lues à l'aide de la propriété ConfigurationManager.ConnectionStrings.

Pour les environnements locaux et de test, j'ai simplement mis en place trois chaînes de connexion comme suit

<connectionStrings> 
    <add name="default.local" connectionString="etc ..> 
    <add name="default.test" connectionString="etc ..> 
    <add name="default" connectionString="etc ..> 
</connectionStrings> 

Déterminer qui stirng connexion pour aller chercher basé sur un autre paramètre dans le fichier de configuration. Une petite fonction d'utilitaire utilise cette information pour choisir la bonne chaîne de connexion.

De cette façon, le fichier de configuration reste la même dans les différents déploiements en dehors du cadre de l'environnement.

EDIT: oublié de mentionner que ces valeurs sont mises en mémoire cache et que l'application redémarre lorsqu'elles sont modifiées (peut être un problème, peut-être utile) Les performances vont directement au fichier .config via la classe ConfigurationManager.

+0

Vous devriez être en mesure de déterminer quel environnement votre application devrait utiliser à partir de l'URL - disons que vous avez un site de développement. http://dev.mydomain.com, un site de test http://test.mydomain.com et production http://www.mydomain.com - vous pouvez récupérer le nom d'hôte, obtenir la première partie de l'URL, et choisissez votre chaîne de connexion de manière appropriée. Une part de gateau. –

+0

Vous pouvez également utiliser un seul nom connectionString et modifier la valeur avec l'outil de déploiement. –

+0

@Jeff - accepté - cet exemple provient d'un environnement opérationnel où seul le bloc-notes est disponible. –

3

Je suis totalement d'accord avec James Westgate. Si vous utilisez le fichier web.config, vous n'avez pas à vous soucier de ce problème.

Dans le cas où vous ne pouvez pas utiliser le web.config pour une raison quelconque, je dirais que votre approche est correcte. Stocker la valeur sur le stockage d'application vous évitez de lire la chaîne de connexions encore et encore à partir du disque.

Si vous devez modifier la chaîne de connexion, vous devez redémarrer l'application. Une chaîne de connexion n'est pas supposée changer tous les jours donc cela ne devrait pas poser de problème.

BTW: Je n'aime pas beaucoup la logique demandant dans quel environnement vous êtes. Cela ne devrait pas être nécessaire du tout ...

+0

Ceci est une bonne information ... merci d'adresser mes pensées d'une manière qui améliore ma compréhension globale – HaterTot