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

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

在此处输入图像描述

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

我试着删除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尝试了上述ConfigurationManager.ConnectionStrings ,并且服务器(Azure)连接字符串不存在。

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

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

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

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

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

控制器:

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

视图:

 

ConnectionStrings:

    @foreach (var setting in ViewBag.ConnectionStrings) {
  • @setting.Name: @setting.ConnectionString
  • }

AppSettings:

    @foreach (var s in ViewBag.AppSettings) {
  • @setting: @System.Configuration.ConfigurationManager.AppSettings[s]
  • }

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

环境

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

Azure快照 -/> Api App  – >应用程序设置 – >连接字符串”> </p>
<p>  <strong>我想做什么我想把</strong>我的连接字符串放在Azure上,就像提到的@Sandrino Di Mattia一样,从那里动态检索它。 </p>
<p>  <strong>对我有用的步骤</strong> </p>
<ol>
<li> 在web.config中创建connectionStrings </li>
</ol>
<p>  ` </p>
<pre> <code><connectionstrings> <add name=

`

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

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

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

注意:您可以在此处找到Azure自动生成的另一个连接字符串。 删除它是安全的,因为我们没有使用它。

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

    Name = dbConnectionStringForAzure

    Value = 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;' 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. 保存

在此阶段,Azure应在运行时使用此连接字符串。 想validation!? 类似于@Sandrino Di Mattia上面提到的内容,或@Shaun Luttin在此SOpost中检索与C#.NET链接到Windows Azure网站的SQL Azure数据库的连接字符串 。

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

  

Value of dbConnectionStringForAzure : @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString

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

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

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

感谢几十个post和额外的咖啡!