C# 检索并使用Windows Azure';什么是连接字符串?
我已在Azure管理门户配置->连接字符串(链接资源)中配置了连接字符串: 这些连接字符串的用途是什么 我尝试从web.config文件中删除conn.strings,因此它应该从这里读取,但没有 还有别的办法吗 基本上,我希望这些连接字符串覆盖web.config中要在生产环境中使用的连接字符串 我已将以下内容添加到C# 检索并使用Windows Azure';什么是连接字符串?,c#,azure,web-config,connection-string,C#,Azure,Web Config,Connection String,我已在Azure管理门户配置->连接字符串(链接资源)中配置了连接字符串: 这些连接字符串的用途是什么 我尝试从web.config文件中删除conn.strings,因此它应该从这里读取,但没有 还有别的办法吗 基本上,我希望这些连接字符串覆盖web.config中要在生产环境中使用的连接字符串 我已将以下内容添加到应用程序\u Start方法中: var sb = new StringBuilder(); var appConfig = ConfigurationManager.OpenM
应用程序\u 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,连接字符串:数据源=。\SQLEXPRESS;综合安全=SSPI;AttachDBFilename=|数据目录| aspnetdb.mdf;用户实例=true
我使用
ConfigurationManager尝试了上述操作。ConnectionString
也不存在服务器(Azure)连接字符串。门户中的连接字符串允许您覆盖web.config中定义的连接字符串
在本地开发时,可能会使用位于localhost\SQLExpress或类似位置的数据库。如果您在未设置web.config转换的情况下进行部署,则意味着您在Windows Azure中运行的网站仍将指向localhost\SQLExpress,这不是您想要的
门户中的连接字符串允许您覆盖web.config中已定义的现有连接字符串。如果web.config不包含与门户中配置的名称相同的连接字符串,则不会添加该字符串,并且在运行时可以访问该字符串。这可能是您遇到的问题
要解决此问题,只需在web.config文件中添加一个与已添加到门户的名称相同的连接字符串即可
更新:就像我在评论中已经解释的那样,Windows Azure网站不会实际修改Web.config(),而是在运行时进行修改。因此,为了检查哪些AppSettings和ConnectionString在运行时实际可用,请尝试以下操作:
控制器:
public ActionResult Index()
{
ViewBag.ConnectionStrings =
ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
ViewBag.AppSettings = ConfigurationManager.AppSettings;
return View();
}
public ActionResult Index()
{
ViewBag.ConnectionString=
ConfigurationManager.ConnectionString.Cast();
ViewBag.AppSettings=ConfigurationManager.AppSettings;
返回视图();
}
视图:
<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>
连接字符串:
@foreach(ViewBag.ConnectionString中的变量设置)
{
- @setting.Name:@setting.ConnectionString
}
应用程序设置:
@foreach(ViewBag.AppSettings中的变量s)
{
- @设置:@System.Configuration.ConfigurationManager.AppSettings[s]
}
两天后,我终于让它开始工作了。我在这里添加了我的解决方案,希望它能在将来帮助别人
环境
- Azure API应用程序(但理论上,它也适用于其他类型的项目)
- SQL数据库(托管在Azure上)。很明显,它可以是任何db
- EF 6.0-数据库优先方法
- 连接字符串存储在Azure上的应用程序设置->连接字符串部分下。下图所示
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}
现在,当我调用API时,它动态地使用了Azure中存储的连接
多亏了几十篇帖子和额外的咖啡镜头 不。所有被覆盖的连接都在web.config中,它们实际上没有被覆盖。请检查跟踪我并使我的生活陷入地狱的严重错误。覆盖web.config发生在运行时,Windows Azure网站不会实际修改web.config。我将更新我的答案。在
应用程序启动时不起作用。我没有在视图/控制器中尝试它。检查我的最新问题。这让我抓狂。我使用FTP检查部署的web.config并查找开发连接字符串;不知道网站为什么使用生产连接字符串!谢谢你的解释!帮了大忙!但有一点是,该视图包含一个小小的ctrl-C ctrl-V错误,在appsettings部分@settings不存在,因此它应该看起来像:@s:@System.Configuration.ConfigurationManager.appsettings[s]
<p>Value of dbConnectionStringForAzure :
@System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString
</p>
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}