从 Windows 服务读取 web.config 中定义的连接字符串
Reading connection string defined in web.config from Windows service
我正在尝试从 Windows 服务中读取 web.config 中定义的连接字符串。站点名称为 MySite
,托管在 http://localhost:31000
的 IIS 上,物理路径为 C:\inetpub\wwwroot\MySite
问题是以下代码总是从系统级别 machine.config 而不是本站点的 web.config 读取连接字符串。我尝试了不同的设置和代码,但结果相同。我做错了什么?
var configFile = new FileInfo(@"C:\inetpub\wwwroot\MySite\web.config");
var vdm = new System.Web.Configuration.VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
var wcfm = new System.Web.Configuration.WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
ConnectionStringsSection csSection = config.ConnectionStrings;
for (int i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)
{
ConnectionStringSettings cs = csSection.ConnectionStrings[i];
if (cs.Name == 'SQLServerConnectionString')
return cs.ConnectionString;
}
应该简单多了。这就是从 web.config 文件中读取连接字符串所需的全部内容。
<ConnectionStrings>
<add name="SQLServerConnectionString" connectionString="" />
</ConnectionStrings>
var connectionString = ConfigurationManager.ConnectionStrings["SQLServerConnectionString"].ConnectionString;
根据您的描述,我建议您可以尝试使用System.Xmllibrary读取配置文件,并使用select方法对配置文件中的连接字符串节点进行select。
更多详情,您可以参考以下代码:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"The path");
XmlNodeList xnodes = xdoc.SelectSingleNode("/configuration/connectionStrings").ChildNodes;
foreach (XmlNode item in xnodes)
{
if (item.Attributes[0].Value == "ConnectionString")
{
Console.WriteLine(item.Attributes[1].Value);
}
}
结果:
我正在尝试从 Windows 服务中读取 web.config 中定义的连接字符串。站点名称为 MySite
,托管在 http://localhost:31000
的 IIS 上,物理路径为 C:\inetpub\wwwroot\MySite
问题是以下代码总是从系统级别 machine.config 而不是本站点的 web.config 读取连接字符串。我尝试了不同的设置和代码,但结果相同。我做错了什么?
var configFile = new FileInfo(@"C:\inetpub\wwwroot\MySite\web.config");
var vdm = new System.Web.Configuration.VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
var wcfm = new System.Web.Configuration.WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
ConnectionStringsSection csSection = config.ConnectionStrings;
for (int i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)
{
ConnectionStringSettings cs = csSection.ConnectionStrings[i];
if (cs.Name == 'SQLServerConnectionString')
return cs.ConnectionString;
}
应该简单多了。这就是从 web.config 文件中读取连接字符串所需的全部内容。
<ConnectionStrings>
<add name="SQLServerConnectionString" connectionString="" />
</ConnectionStrings>
var connectionString = ConfigurationManager.ConnectionStrings["SQLServerConnectionString"].ConnectionString;
根据您的描述,我建议您可以尝试使用System.Xmllibrary读取配置文件,并使用select方法对配置文件中的连接字符串节点进行select。
更多详情,您可以参考以下代码:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"The path");
XmlNodeList xnodes = xdoc.SelectSingleNode("/configuration/connectionStrings").ChildNodes;
foreach (XmlNode item in xnodes)
{
if (item.Attributes[0].Value == "ConnectionString")
{
Console.WriteLine(item.Attributes[1].Value);
}
}
结果: