Des différences de comportement entre le Système.Web.La Configuration.WebConfigurationManager et du Système.La Configuration.ConfigurationManager
J'ai eu quelques difficultés sur un serveur de test avec un ASP.NET site web. J'ai raté son coup, et a la maison
répertoire du Site Web par Défaut signalé à la mauvaise place. Quand j'ai essayé:
ConfigurationManager.ConnectionStrings["connectionString"];
il a retourné null, mais
using System.Web.Configuration;
/* ... */
var rootWebConfig =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;`
retourné la chaîne de connexion approprié.
Quelles sont les différences entre les deux approches?
EDIT: Ce que je suis vraiment se poser est, pourquoi ne le ConfigurationManager
approche échoue lorsque le répertoire est défini de manière incorrecte, mais réussit, et l' WebConfigurationManager
réussit indépendamment de si le répertoire de base est-elle correctement réglée? Existe-il d'autres différences, telles que les hypothèses sur le contrôle d'accès?
OriginalL'auteur David Hodgson | 2010-01-13
Vous devez vous connecter pour publier un commentaire.
Essayez Ceci:
Mettre un point d'arrêt où votre ConfigurationManager déclaration est et exécutez la commande suivante dans l'Immédiat de la fenêtre de Sortie
((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation
. Ma machine rapports Source: "C:\Users\John\Documents\Visual Studio 2008\Projects\StackOverflowCode\WebApplication1\web.config" comme on le voit ci-dessous.
Remarque: Le code suivant montre également la mienne est en cours d'accès ASP.NET web.config.
Et quand je lance
ConfigurationManager.ConnectionStrings.ElementInformation
- je obtenir Source:null ce qui est correct pour mon application web.Ce que vous obtenez pour une configuration de la Source de chemin???
Immédiate Hypothèse
ConfigurationManager.ConnectionStrings["connectionString"];
peut se présenter pour une config endroit qui n'est pas nécessairement le même que le web racine de l'application web.config. Probablement, il est à la recherche dans un répertoire de Windows (e.g à un endroit différent ou de la machine.config). Essayer de trouver un test approprié pour cette même si.Intentions de Chaque Gestionnaire de
Système.La Configuration.ConfigurationManager pouvez accéder à l' .NET configuration du format XML, ce qui signifie qu'il lit à la fois:
et exprime ces aspects qui sont communs à tous les types de configuration. C'est d'un usage général, gestionnaire de configuration. (Cependant, malgré cette capacité à regarder les deux types de configurations, vous devez l'utiliser pour l'application configs parce que le gestionnaire du site web est consacré à la web configs, comme décrit par la suite ...)
Système.Web.La Configuration.WebConfigurationManager fait à peu près la même chose mais c'est le "webified" version du gestionnaire de configuration, la fourniture d'accès à ASP.NET web-les aspects spécifiques de la configuration (par exemple web.fichier de configuration dans ASP.NET).
Similitudes
Voir membre similitudes entre ConfigurationManager.* et WebConfigurationManager.*
À la fois les gestionnaires peuvent, par exemple, accéder à un
AppSettings
de la propriété et unConnectionStrings
de la propriété. En fait, ces deux paramètres sont communs à ces deux types de config et sont même situés au même niveau dans le document XML.Il y a beaucoup de similitudes cependant,
Les Différences De Comportement
Accéder à la configuration:
ConfigurationManager a des méthodes pour ouvrir l'application autonome configs (c'est à dire Myprogram.EXE's App.config) par rapport à l'EXEC application, alors que WebConfigurationManager a des méthodes pour ouvrir le ASP.NET web config par rapport à la racine de l'application web directory dans le site web.
Voici une base app.config (par exemple, ouvert à travers "C:\winapp\app.config" à partir d'un dossier du disque par ConfigurationManager)
Et voici une base web.config (par exemple, ouvert par "~" sens de la racine du site web par WebConfigurationManager)
Noter les similitudes. Notez également la configuration web a une plus
system.web
élément pour ASP.NET.Ces gestionnaires sont situés dans différents assemblées.
J'ai complètement n'ai pas la réponse à votre question, puis ajouté un edit pour en haut.
J'ai ajouté de l'information sur la façon dont j'révéler ce répertoire et le fichier config ConfigurationManager est d'essayer d'accès, avec les résultats de ma machine. Pouvez-vous répéter sur le vôtre, et de voir où votre fichier de configuration est à venir à partir de ...
Sur un nouveau projet d'application web avec une chaîne de connexion, WebConfigurationManager.ConnectionStrings.ElementInformation.Source de renvoie la valeur null, WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath).ConnectionStrings.ElementInformation.Source de renvoie "C:\\Users\\David\\Documents\\Visual Studio 2008\\Projets\\WebConfigTests\\WebConfigTests\\web.config"; et ConfigurationManager.ConnectionStrings.ElementInformation.Source de renvoie la valeur null même si ConfigurationManager.ConnectionStrings.Le comte est de 2?
Qu'est ce retour à la Source?
((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation
OriginalL'auteur
Première classe fournit l'accès aux services généraux de la configuration du client de fichiers (tels que l'app.la configuration) et un deuxième pour l'application web de fichiers (tels que le web.config).
OriginalL'auteur Restuta