【问题标题】:Azure web app can't access azure DBAzure Web 应用无法访问 Azure DB
【发布时间】:2018-04-06 13:53:30
【问题描述】:

我有一个带有 sql 数据库和 asp.net 5 Web 应用程序的 Azure 试用帐户。数据库服务器防火墙对我的本地计算机 IP 有一个规则,并且选中了“允许访问 Azure 服务”复选框。我可以从我的本地 Sql Server 管理器连接到 Azure 数据库而不会发生意外。

Web 应用程序在其“应用程序设置/连接字符串”部分设置了此连接字符串。我已经使用此连接字符串检查了 wep 应用程序 IS:

"服务器=tcp:[MyServerName].database.windows.net,1433;Database=[MyDbName];用户 ID=[MyUserName]@[MyServerName];Password=[MyPassword];Encrypt=True;TrustServerCertificate=False ;联系 超时=30;"

在桌面客户端中使用相同的连接字符串并且工作正常。 但是web app连接不上服务器,抛出这个异常,很清楚,但是不知道怎么解决。

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:命名 Pipes Provider,错误:40 - 无法打开与 SQL Server 的连接)

我知道这里已经提出并回答了非常相似的问题,但它们都不是我面临的完全相同的问题,也不是我的解决方案。

感谢大家的宝贵时间。

更新 1

作为测试,我已将网站配置为在本地 IIS 上运行,针对 azure DB,它也可以运行。因此,桌面应用程序、sql server manager 和 IIS 可以从我的本地计算机访问这个数据库。当然,我的 IP 在服务器防火墙中被列入白名单,但 azure 应用服务也被列入白名单,无法访问。

更新 2

Joe Raio 的评论让我仔细检查了区域配置,这是当前设置的屏幕截图。我相信一切都是正确的。

【问题讨论】:

  • 您是否也尝试将 Web 服务器的地址添加到数据库的防火墙设置中?当我有时间看看是否可以进一步排除故障时,我会尝试重现您的场景。
  • 网站托管在Azure App Services,所以不知道怎么查IP。但是,在 sql server 的防火墙设置中,有一条规则启用“允许访问 Azure 服务”,它应该将 azure 内的所有应用程序列入白名单。
  • 您可以点击网页应用的“属性”标签查看IP地址。尽管根据您的描述,您不必添加 Web 应用程序的 IP 地址。它应该工作。 Web 应用程序和 sql 数据库是否都托管在同一个 Azure 地理区域中?
  • 刚刚检查过,是的,两者都托管在“西欧”地区。
  • 您是否能够从属性选项卡中获取 IP 并尝试以这种方式添加?

标签: azure azure-sql-database azure-web-app-service


【解决方案1】:

网络应用程序在其“应用程序”中设置了此连接字符串 设置/连接字符串部分。我已经检查了 wep 应用程序 IS 使用这个连接字符串:

这不是您为 ASP.net 5 应用程序设置连接字符串的地方。

打开你的文件appsettings.json,第一部分应该包含以下数据

  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-WestEuroSODBAccess-96be0407-8bee-4c89-97e5-f6711136f106;Trusted_Connection=True;MultipleActiveResultSets=true"
    }

把你的连接字符串放在那里。类似的

  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=tcp:[MyServerName].database.windows.net,1433;Database=[MyDbName];User ID=[MyUserName]@[MyServerName];Password=[MyPassword];Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
    }

这将解决问题。我最初没有发现您将其设置为 ASP.net 5 应用程序。

更多信息可以在这里找到:http://docs.asp.net/en/latest/fundamentals/configuration.html

【讨论】:

  • 感谢您的努力,但我已经这样做了。它在本地运行非常好。但是当我发布网站时,它不起作用。由于现在安全不是我关心的问题,我什至在网站上打印了正在使用的连接字符串,它是正确的(它适用于本地 IIS、SSMS、桌面应用程序),但我在发布时收到错误 40。能不能和实体框架有关?
  • 我刚刚做了一个测试,设置了一个新的资源组、数据库服务器、数据库和网络应用程序(都在西欧)。然后我创建了一个 ASP.net 5 应用程序,更新了 appsettings.json 中的连接字符串并发布了它。它运行良好,您可以在此处查看:jmrwesteuroweb.azurewebsites.net。一定有其他原因导致了这个问题。您能否将 URL 或项目文件通过电子邮件发送给我,我很乐意为您查看它们? joe.raio@microsoft.com .
  • 我想到的是错误状态存在“命名管道”问题,但连接字符串上有“tcp”。我知道有两种不同的协议,所以也许这很有用。
  • 问题是你在哪里声明你的 dbContext。我建议从内置的 ASP.net 5 模板之一开始,并将连接字符串放在 appsettings.json 中。然后您将看到问题出在您的代码中,而不是 Azure。希望一切顺利!
  • 就是这样,由工具“dnx ef dbcontext scaffold”自动创建的 DbContext 正在使用本地连接字符串,如果我在应用程序级别有正确的连接字符串。谢谢乔!
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2021-01-27
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
相关资源
最近更新 更多