检索和使用Windows Azure的连接字符串?(Retrieve and use Windows

2019-07-04 19:36发布

I've configured connection strings in Azure management portal Configure->Connection Strings (linked resources):

What are these connection strings useful for?

I tried deleting the conn. strings from web.config file, so it should read from here, but it doesn't.

Is there any other way?

Basically I want these connection strings to override the connection strings in web.config to be used in production environment.

I've added the following to the Application_Start method:

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());

Here's the result:

Name: LocalSqlServer, ConnectionString: data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

I tried the above with ConfigurationManager.ConnectionStrings as well and the server (Azure) connection strings were not there.

Answer 1:

在门户网站中连接字符串,您可以覆盖在web.config中定义的连接字符串。

当你在本地开发时,你可能会使用位于本地主机\的SQLExpress或类似的数据库。 如果部署,而不必设立的web.config转型这将意味着,在Windows Azure上运行你的网站仍然将指向到localhost \的SQLExpress,这是不是你想要的东西。

在门户网站中连接字符串 ,您可以覆盖这是在web.config中已经定义的现有连接字符串 。 如果你的web.config不包含具有相同的名称作为一个在门户中配置一个连接字符串,它不会被添加在运行时访问。 这可能是你所遇到的问题。

为了解决这个问题,只需一个连接字符串添加到您的web.config文件具有相同的名称,你已经加入到门户网站之一。

更新:就像我已经在评论解释中,Windows Azure网站实际上并不修改web.config( 源 ),它这样做在运行时。 因此,为了检查哪些的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>


Answer 2:

两天后,我终于设法得到它的工作。 我将我的解决方案在这里希望它可以帮助别人的未来。

环境

  • Azure的API APP(但在理论上,它应该用于其他类型的项目工作太)
  • SQL数据库(托管在Azure上)。 它可以是任何明显分贝
  • EF 6.0 - 数据库第一种方法
  • >连接字符串部分 - 连接字符串应用程序设置下存储在天青。 下面示出图像

我想做的事 ,我想放在Azure和像@Sandrino迪马蒂亚提到我的连接字符串,动态地从那里获取它。

这为我工作的步骤

  1. 创建在web.config一个的ConnectionStrings

`

<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。

进入菜单 - >调试控制台 - > PowerShell的 - >编辑Web.config文件。 (还有其他的方法来获取web.config文件中了。用你喜欢的人。)

注:在这里,你可能会发现另一个自动通过Azure的生成连接字符串。 它的安全删除,因为我们没有使用。

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

    NAME = 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;' 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. 前第三下拉列表中,选择自定义。 这一点很重要别的天青将增加System.Data.SqlClient的(或取决于选择什么任何其他供应商)在我们的连接字符串,这是我们不希望的供应商名称。

  3. 保存

在这个阶段,天青应使用在运行时,这个连接字符串。 要验证!? 做类似于以上建议由@Sandrino迪马蒂亚或在此通过@Shaun Luttin SO发布检索链接到Windows Azure的Web站点使用C#.NET的SQL Azure数据库的连接字符串 。

或者,把下面的代码在任何剃刀模板:

    <p>Value of dbConnectionStringForAzure  :
    @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString    
    </p>

在另一方面,我已在我的DbContext构造连接字符串名称。

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

        }

现在,当我打了一个电话给我的API它动态地使用存储在Azure中的连接。

多亏了几十个职位和咖啡额外的镜头!



文章来源: Retrieve and use Windows Azure's connection strings?