检索并使用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上的“应用程序设置” – >“连接字符串”部分下。 图片如下所示
`
请注意,providerName是System.Data.EntityClient而不是System.Data.SqlClient 。
额外位:此外,一旦发布了项目,就可以validationweb.config中的连接字符串。 导航到projectorapiurl.scm.azurewebsites.net。
转到菜单 – >调试控制台 – > PowerShell – >编辑Web.config文件。 (还有其他方法可以获取web.config文件。使用您喜欢的文件。)
注意:您可以在此处找到Azure自动生成的另一个连接字符串。 删除它是安全的,因为我们没有使用它。
-
转到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;'
-
在第三个下拉列表前面,选择CUSTOM。 重要的是,Azure将在我们的连接字符串的提供程序名称中添加System.Data.SqlClient(或任何其他提供程序,具体取决于所选内容),这是我们不想要的。
- 保存
在此阶段,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和额外的咖啡!