Les différences de comportement entre les System.Web.Configuration.WebConfigurationManager et System.Configuration.ConfigurationManager
-
20-09-2019 - |
Question
J'ai eu quelques problèmes sur un serveur de test avec un site Web ASP.NET. Je gaffé, et a la maison répertoire du site Web par défaut a au mauvais endroit. Quand j'ai essayé:
ConfigurationManager.ConnectionStrings["connectionString"];
il est revenu nul, 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 correcte.
Quelles sont toutes les différences entre les deux approches?
EDIT: Ce que je demande vraiment, pourquoi ne l'approche ConfigurationManager
échouent lorsque le répertoire est mal réglé, mais réussit autrement, et le WebConfigurationManager
réussit indépendamment du fait que le répertoire est correctement réglé? Y a-t-il d'autres différences, comme les hypothèses sur le contrôle d'accès?
La solution
Essayez ceci:
Mettez un point d'arrêt où votre déclaration de ConfigurationManager est et exécutez la commande suivante dans la fenêtre de sortie immédiate
((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation
. Mes rapports de la machine Source: "C: \ Users \ John \ Documents \ Visual Studio 2008 \ Projects \ StackOverflowCode \ WebApplication1 \ web.config" comme on le voit ci-dessous.
Remarque:. Ce qui suit montre aussi le mien accède à la web.config ASP.NET
{System.Configuration.ElementInformation}
Errors: {System.Configuration.ConfigurationException[0]}
IsCollection: true
IsLocked: false
IsPresent: true
LineNumber: 17
Properties: {System.Configuration.PropertyInformationCollection}
Source: "C:\\Users\\John\\Documents\\Visual Studio 2008\\Projects\\StackOverflowCode\\WebApplication1\\web.config"
Type: {Name = "ConnectionStringsSection" FullName = "System.Configuration.ConnectionStringsSection"}
Validator: {System.Configuration.DefaultValidator}
Et quand je lance ConfigurationManager.ConnectionStrings.ElementInformation
je reçois Source :. Null qui est correct pour mon application web
Qu'est-ce que vous obtenez pour un chemin de source de configuration ???
immédiate Assomption
ConfigurationManager.ConnectionStrings["connectionString"];
pourrait chercher un emplacement de configuration qui ne sont pas nécessairement les mêmes que web.config racine de l'application Web. Probablement qu'il cherche dans un répertoire Windows (par exemple à un endroit différent ou pour machine.config). Essayer de trouver un test approprié pour ce bien.
Les intentions de chaque gérant
System.Configuration. ConfigurationManager peut accéder au format XML de configuration .NET qui signifie qu'il lit à la fois:
- configurations Web (par exemple fichier web.config dans ASP.NET)
- et les configurations non-Web (par exemple fichier app.config - app console autonome, app de Windows, etc.)
et exprime les aspects qui sont communs aux types de configuration. Ceci est un gestionnaire de configuration d'usage général. (Cependant, malgré cette capacité à regarder les deux types de configs, vous devez l'utiliser pour configs application, car le gestionnaire Web est consacré aux configs Web, comme décrit plus loin ...)
System.Web.Configuration . WebConfigurationManager fait à peu près la même chose, mais est la version "webified" du gestionnaire de configuration, l'accès à ASP.NET aspects spécifiques Web de configuration (par exemple fichier web.config en ASP .NET).
Similitudes
Voir les similitudes entre membres ConfigurationManager. * et WebConfigurationManager. *
Les gestionnaires peuvent, par exemple, accéder à une propriété AppSettings
et une propriété ConnectionStrings
. En effet, ces deux paramètres sont communs aux deux types de configuration et sont même situés au même niveau dans le document XML.
Alors il y a beaucoup de similitudes cependant,
Les différences de comportement
Configuration Accès : ConfigurationManager a des méthodes pour ouvrir configs d'applications autonomes (à savoir App.config de MyProgram.exe) de par rapport à l'application EXEC, alors que WebConfigurationManager a des méthodes pour ouvrir la configuration Web ASP.NET par rapport à son application web répertoire racine dans le site Web.
Voici une base app.config (par exemple ouvert via "C: \ WinApp \ app.config" à partir d'un dossier de disques par ConfigurationManager )
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings/>
<connectionStrings/>
</configuration>
Et voici une base web.config (par exemple ouvert via "~" qui signifie racine du site Web par WebConfigurationManager )
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<!-- special web settings -->
</system.web>
</configuration>
Remarquez les similitudes. Notez également la configuration de la bande comporte un élément de system.web
supplémentaire pour ASP.NET.
Ces gestionnaires sont situés dans différents ensembles .
- ConfigurationManager: System.Configuration.dll
- WebConfigurationManager: System.Web.dll
Autres conseils
Première classe permet d'accéder aux fichiers de configuration client généraux (comme app.config) et deuxième pour les fichiers de l'application Web (par exemple web.config).