检索并使用Windows Azure连接字符串?

时间:2012-12-08 21:54:42

标签: c# azure web-config connection-string

我在Azure管理门户配置 - >连接字符串(链接资源)中配置了连接字符串:

enter image description here

这些连接字符串对于什么有用?

我试着删除conn。来自web.config文件的字符串,所以它应该从这里读取,但它没有。

还有其他办法吗?

基本上我希望这些连接字符串覆盖web.config中的连接字符串,以便在生产环境中使用。

我已将以下内容添加到Application_Start方法中:

var sb = new StringBuilder();
var appConfig = ConfigurationManager.OpenMachineConfiguration();  
foreach (ConnectionStringSettings conStr in appConfig.ConnectionStrings.ConnectionStrings)
  sb.AppendFormat("Name: {0}, ConnectionString: {1}\n", conStr.Name, conStr.ConnectionString);
throw new Exception(sb.ToString());

结果如下:

  

名称:LocalSqlServer,ConnectionString:data source =。\ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; User Instance = true

我也使用ConfigurationManager.ConnectionStrings尝试了上述内容,并且服务器(Azure)连接字符串不存在。

2 个答案:

答案 0 :(得分:12)

Portal中的连接字符串允许您覆盖 web.config 中定义的连接字符串。

当您在本地开发时,您可能使用位于localhost \ SQLExpress中的数据库或类似的东西。如果在没有设置web.config转换的情况下进行部署,则意味着在Windows Azure中运行的Web站点仍然指向localhost \ SQLExpress,这不是您想要的。

Portal中的连接字符串允许您覆盖已在web.config中定义的 现有连接字符串 。如果您的web.config不包含与门户网站中配置的连接字符串同名的连接字符串,则不会添加该字符串并且可以在运行时访问它。这可能是您遇到的问题。

要解决此问题,只需在web.config文件中添加一个连接字符串,其名称与您已添加到门户网站的名称相同。

更新:就像我在评论中已经解释的那样,Windows Azure网站不会物理修改web.config(source),它会在运行时执行此操作。因此,为了检查运行时实际可用的AppSettings和ConnectionStrings,请尝试以下操作:

控制器:

public ActionResult Index()
{
  ViewBag.ConnectionStrings =
    ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
  ViewBag.AppSettings = ConfigurationManager.AppSettings;
  return View();
}

查看:

<h3>ConnectionStrings:</h3>
<ul>
  @foreach (var setting in ViewBag.ConnectionStrings)
  {
    <li>@setting.Name: @setting.ConnectionString</li>
  }
</ul>
<h3>AppSettings:</h3>
<ul>
  @foreach (var s in ViewBag.AppSettings)
  {
    <li>@setting: @System.Configuration.ConfigurationManager.AppSettings[s]</li>
  }
</ul>

答案 1 :(得分:2)

两天后,我终于设法让它上班了。我在这里添加我的解决方案,希望将来可以帮助某人。

<强>环境

  • Azure API APP(但理论上,它也适用于其他类型的项目)
  • SQL DB(托管在Azure上)。它显然可以是任何db
  • EF 6.0 - 数据库优先方法
  • 连接字符串存储在Azure上的“应用程序设置” - >“连接字符串”部分下。图片如下所示

Snapshot from Azure -> Api App -> Application Settings-> Connection Strings

我想做什么 我想把我的连接字符串放在Azure上,就像提到的@Sandrino Di Mattia一样,从那里动态地检索它。

对我有用的步骤

  1. 在web.config
  2. 中创建connectionStrings

    `

    <connectionStrings>
        <add name="dbConnectionStringForAzure" connectionString="Local Connection String" providerName="System.Data.EntityClient"/>
      </connectionStrings>
    

    `

    请注意,providerName是 System.Data.EntityClient 而不是 System.Data.SqlClient

    额外位:此外,一旦发布了项目,就可以验证web.config中的连接字符串。导航到projectorapiurl.scm.azurewebsites.net。

    转到菜单 - &gt;调试控制台 - &gt; PowerShell - &gt;编辑Web.config文件。 (还有其他方法可以获取web.config文件。使用您喜欢的文件。)

    注意:在这里,您可能会找到Azure自动生成的另一个连接字符串。我们不使用它是安全的。

    1. 转到Azure - &gt;您的项目和应用程序设置。添加如下所示的详细信息:

      名称= dbConnectionStringForAzure

      值= Provider=System.Data.SqlClient; metadata=res://*/csdlModel.csdl|res://*/ssdlModel.ssdl|res://*/mslModel.msl; Provider Connection String ='Data Source=server.database.windows.net,1433;initial catalog=database;User ID=username;Password=password;MultipleActiveResultSets=True;App=EntityFramework;'

    2. 在第三个下拉列表前面,选择CUSTOM。重要的是,Azure将在我们的连接字符串的提供者名称中添加System.Data.SqlClient(或任何其他提供者,具体取决于所选择的内容),这是我们不想要的。

    3. 保存
    4. 在此阶段,Azure应在运行时使用此连接字符串。想验证!?与@Sandrino Di Mattia或@Shaun Luttin Retrieve the connection string of an SQL Azure database that is linked to a Windows Azure Web Site with C#.NET撰写的SO帖子类似。

      或者,将以下代码放在任何剃刀模板中:

          <p>Value of dbConnectionStringForAzure  :
          @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString    
          </p>
      

      另一方面,我在DbContext构造函数中设置了连接字符串名称。

              public MyEntities() : base("name=dbConnectionStringForAzure")
              {
      
              }
      

      现在,当我调用我的API时,它会动态使用存储在Azure中的连接。

      感谢几十个帖子和咖啡的额外照片!