【问题标题】:Read connection string from web.config file when deploy to IIS7部署到 IIS7 时从 web.config 文件中读取连接字符串
【发布时间】:2015-02-12 08:27:54
【问题描述】:

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

我有具有 web.config 文件的 WCF 服务应用程序。在 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 的机器。

谢谢, Awadhendra

【问题讨论】:

  • 您是在尝试从 WCF 应用程序外部还是从 WCF 服务代码中读取连接字符串值?
  • 在 WCF 服务代码内。
  • 您可以尝试使用 System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString 吗?
  • 您将连接字符串放在应用程序设置而不是实际连接字符串部分的任何原因,因为您的代码试图读取连接字符串部分并且那里什么都没有(因此&lt;connectionStrings /&gt;
  • 你不应该把你的用户名和密码放在这个网站上,任何人都可以查看它们。

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


【解决方案1】:

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

请参考here

例如

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

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

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

【讨论】:

    【解决方案2】:

    你可以试试这个:-

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      相关资源
      最近更新 更多