10

我在 Azure 管理门户配置->连接字符串(链接资源)中配置了连接字符串:

在此处输入图像描述

这些连接字符串有什么用?

我尝试删除连接。来自 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:数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

我也尝试了上述ConfigurationManager.ConnectionStrings方法,但服务器(Azure)连接字符串不存在。

4

2 回答 2

12

门户中的连接字符串允许您覆盖web.config中定义的连接字符串。

当您在本地进行开发时,您可能会使用位于 localhost\SQLExpress 或类似位置的数据库。如果您在没有设置 web.config 转换的情况下进行部署,则意味着您在 Windows Azure 中运行的网站仍将指向 localhost\SQLExpress,这不是您想要的。

门户中的连接字符串允许您覆盖已在 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>
于 2012-12-08T22:41:46.293 回答
3

两天后,我终于设法让它工作了。我在这里添加我的解决方案,希望它将来可能对某人有所帮助。

环境

  • Azure API APP(但理论上,它也应该适用于其他类型的项目)
  • SQL DB(托管在 Azure 上)。显然可以是任何数据库
  • EF 6.0 - 数据库优先方法
  • 连接字符串存储在 Azure 上的应用程序设置 -> 连接字符串部分。如下图所示

Azure 的快照 -> Api 应用程序 -> 应用程序设置 -> 连接字符串

我想做的是 我想把我的连接字符串放在 Azure 上,就像@Sandrino Di Mattia 提到的那样,从那里动态检索它。

对我有用的步骤

  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. 转到 Azure -> 您的项目和应用程序设置。添加如下所示的详细信息:

    姓名 =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;'

  2. 在第三个下拉列表前面,选择 CUSTOM。重要的是,Azure 将在我们不想要的连接字符串的提供程序名称中添加 System.Data.SqlClient(或任何其他提供程序,具体取决于所选内容)。

  3. 节省

在这个阶段,Azure 应该在运行时使用这个连接字符串。想要验证!?执行类似于@Sandrino Di Mattia 上面的建议或@Shaun Luttin 在此 SO 帖子中的建议检索 SQL Azure 数据库的连接字符串,该数据库使用 C#.NET 链接到 Windows Azure 网站

或者,将以下代码放入任何剃须刀模板中:

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

另一方面,我在 DbContext 构造函数中设置了连接字符串名称。

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

        }

现在,当我调用我的 API 时,它会动态使用存储在 Azure 中的连接。

感谢几十个帖子和额外的咖啡!

于 2016-06-21T08:10:53.757 回答