我在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)连接字符串不存在。
答案 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上,就像提到的@Sandrino Di Mattia一样,从那里动态地检索它。
对我有用的步骤
`
<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自动生成的另一个连接字符串。我们不使用它是安全的。
转到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;'
在第三个下拉列表前面,选择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帖子类似。
或者,将以下代码放在任何剃刀模板中:
<p>Value of dbConnectionStringForAzure :
@System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString
</p>
另一方面,我在DbContext构造函数中设置了连接字符串名称。
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}
现在,当我调用我的API时,它会动态使用存储在Azure中的连接。
感谢几十个帖子和咖啡的额外照片!