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

时间:2015-02-12 08:27:55

标签: c# wcf iis-7 web-config

这似乎是一个非常简单的问题但不适合我。我试图从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 machine。

谢谢, Awadhendra

2 个答案:

答案 0 :(得分:1)

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

请参阅here

e.g。

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

或代码从应用设置中读取它(如果您必须在应用设置中使用它,但我不建议这样做):

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

答案 1 :(得分:0)

你可以尝试一下: -

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

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