【问题标题】:Reading connection string defined in web.config from Windows service从 Windows 服务读取 web.config 中定义的连接字符串
【发布时间】:2019-10-09 08:21:23
【问题描述】:

我正在尝试从 Windows 服务读取 web.config 中定义的连接字符串。站点名称为MySite,托管在IIS 上的http://localhost:31000,物理路径为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;
}

【问题讨论】:

    标签: c# iis web-config windows-services connection-string


    【解决方案1】:

    根据你的描述,我建议你可以尝试使用 System.Xmllibrary 读取配置文件,并使用 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);
                }
            }
    

    结果:

    【讨论】:

      【解决方案2】:

      它应该更简单。这就是从 web.config 文件中读取连接字符串所需的全部内容。

      <ConnectionStrings>
       <add name="SQLServerConnectionString" connectionString="" />
      </ConnectionStrings> 
      

      var connectionString = ConfigurationManager.ConnectionStrings["SQLServerConnectionString"].ConnectionString;

      【讨论】:

      • 我不想在 app.config 中定义连接字符串。它已经在我想要读取的 web.config 中定义(从 Windows 服务内部)
      • 什么?每个应用程序都应该有自己的配置如果你将它们部署在不同的机器上,那么你必须在多个地方定义它,如果你想要一个共享的位置,也可以从文件系统上的一些随机文件中读取。
      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      相关资源
      最近更新 更多