我在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
和服务器(Azure)连接字符串不存在 .
2 回答
Portal中的连接字符串允许您覆盖 web.config 中定义的连接字符串 .
当您在本地开发时,您可能使用位于localhost \ SQLExpress中的数据库或类似的东西 . 如果在未设置web.config转换的情况下进行部署,则意味着在Windows Azure中运行的Web站点仍将指向localhost \ SQLExpress,这不是您想要的 .
Portal中的 connection strings 允许您覆盖已在web.config中定义的 existing connection strings . 如果您的web.config不包含与门户网站中配置的连接字符串同名的连接字符串,则不会添加该字符串并且可以在运行时访问它 . 这可能是您遇到的问题 .
To fix this, 只需在web.config文件中添加一个连接字符串,其名称与您已添加到门户网站的名称相同 .
Update: 就像我在评论中已经解释的那样,Windows Azure网站没有物理修改web.config(source),它在运行时执行此操作 . 因此,为了检查运行时实际可用的AppSettings和ConnectionStrings,请尝试以下操作:
控制器:
视图:
两天后,我终于设法让它上班了 . 我在这里添加我的解决方案,希望它可能在将来帮助某人 .
Environment
Azure API APP(但理论上,它也适用于其他类型的项目)
SQL DB(托管在Azure上) . 它显然可以是任何db
EF 6.0 - 数据库第一种方法
连接字符串存储在Azure上的“应用程序设置” - >“连接字符串”部分下 . 图片如下所示
What I wanted to do 我想把我的连接字符串放在Azure上,就像提到的@Sandrino Di Mattia一样,从那里动态检索它 .
Steps which worked for me
`
`
请注意,providerName是System.Data.EntityClient而不是System.Data.SqlClient .
Extra bit: 此外,一旦发布了项目,就可以验证web.config中的连接字符串 . 导航到projectorapiurl.scm.azurewebsites.net .
转到菜单 - >调试控制台 - > PowerShell - >编辑Web.config文件 . (还有其他方法可以获取web.config文件 . 使用您喜欢的文件 . )
Note: 您可以在此处找到Azure自动生成的另一个连接字符串 . 它's safe to remove that as we aren'吨使用它 .
名称=
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;'
前面第三个下拉列表,选择CUSTOM . 重要的是,Azure将在我们的连接字符串的提供程序名称中添加System.Data.SqlClient(或任何其他提供程序,具体取决于所选内容),这是我们不需要的 .
保存
在此阶段,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帖子 .
或者,将以下代码放在任何剃刀模板中:
另一方面,我在我的DbContext构造函数中设置了连接字符串名称 .
现在,当我调用我的API时,它动态地使用存储在Azure中的连接 .
感谢几十个帖子和额外的咖啡!