部署到 IIS7 时从 web.config 文件读取连接字符串

Read connection string from web.config file when deploy to IIS7

这似乎是个很简单的问题,但对我来说不是。我正在尝试从 web.config 文件中读取连接字符串。

我有 WCF 服务应用程序,其中有 web.config 文件。在 web.config 文件中,我定义了连接字符串。 然后我在默认网站下的IIS7上部署了wcf应用程序(安装IIS7时附带的一个模板)。

现在,当我们读取连接字符串时,它不会给我在 wcf web.config 文件中定义的连接字符串。不知何故我无法访问它。在调试时,当我发现一个连接字符串时,它实际上不是我在 wcf web.config 中定义的连接字符串,而是我不想要的默认网站连接字符串。

我只想访问我定义的 WCF web.config 文件的连接字符串。我被困在里面了。我尝试了所有但没有运气。作为参考,我放了我试过的代码和 web.config 代码。

Web.Config代码。

<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <appSettings>
    <add key="ConnString" value=""/>
    <!--<add key="ConnString" value=""/>-->
  </appSettings>
  <connectionStrings/>
  <system.web>
    <httpRuntime maxRequestLength="2097151"
    useFullyQualifiedRedirectUrl="true"
    executionTimeout="14400"   />
    <compilation debug="true" />
  </system.web>

读取connstring的代码

string connString = string.Empty;

            string svcDir = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
            DirectoryInfo rootDir = Directory.GetParent(svcDir);
            string root = rootDir.FullName;
            string webConfigFilePath = root + "\Web.config";

            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = webConfigFilePath;
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

            var test = configuration.ConnectionStrings.ConnectionStrings;

            string connectionString = "";
            if (configuration.ConnectionStrings.ConnectionStrings["ConnString"].ConnectionString.Length > 0)
            {
                connectionString = configuration.ConnectionStrings.ConnectionStrings["ConnString"].ConnectionString;
            }

            //var connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnString"];
            //if (connectionString != null)
            //{

            //}

            return connString;

我正在使用 .net framework 4.0,IIS 7,apppool 是 .net framework 4.0 和 windows 7 机器。

谢谢, 阿瓦亨德拉

你能试试这个吗:-

string connString = ConfigurationManager.AppSettings["ConnString"].ToString()
        return connString;

它将读取您 web.config 的应用程序设置部分。

web.config 有专门的连接字符串部分,您使用的代码是使用配置管理器访问 web.config 中的连接字符串部分。你遇到的问题是你没有把连接字符串放在连接字符串部分,你已经把它放在应用程序设置中。将连接字符串从应用程序设置中移出并放入连接字符串部分,或者更改您的代码以从应用程序设置中读取它。现在在应用程序设置中存储连接字符串是在 .NET 2.0 中完成的方式,但从那时起 (.NET 3.5) 就有一个专门用于连接字符串的部分。

请参考here

例如

<connectionStrings>
<add name="ConnString" connectionString="xxxwhateveritisxxx" />
</connectionStrings>

或从应用设置中读取它的代码(如果您必须在应用设置中拥有它,尽管我不推荐):

string connectionString = ConfigurationManager.AppSettings["ConnString"];