【问题标题】:Can't connect to SQL Azure from app, but can from SSMS无法从应用程序连接到 SQL Azure,但可以从 SSMS
【发布时间】:2011-06-03 09:31:58
【问题描述】:

我设置了一个 SQL Azure 实例,并且可以从 SQL Server Management Studio 毫无问题地连接到它。但是,当我的应用尝试连接时,会出现此错误:

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

我正在使用 Entity Framework Code First 4.1 和 ASP.NET MVC 3。我的应用最初是使用 SQL Express 成功开发的。现在我正在使用this tutorial to move the database to SQL Azure(该应用最终也会移到那里,但开发仍在继续)。

既然 SSMS 工作正常,我猜它归结为 web.config?我已经尝试了连接字符串名称的每种组合:

<connectionStrings>
    <add name="ApplicationServices" connectionString="Server=tcp:suppressed.database.windows.net,1433;Database=EventsTest;User ID=suppressed;Password=suppressed;Trusted_Connection=False;Encrypt=True;PersistSecurityInfo=True;" providerName="System.Data.SqlClient" />
    <add name="DomainContext" connectionString="Server=tcp:suppressed.database.windows.net,1433;Database=EventsTest;User ID=suppressed;Password=suppressed;Trusted_Connection=False;Encrypt=True;PersistSecurityInfo=True;" providerName="System.Data.SqlClient" />
    <add name="Events.DataAccess.EntityFramework.DomainContext" connectionString="Server=tcp:suppressed.database.windows.net,1433;Database=EventsTest;User ID=suppressed;Password=suppressed;Trusted_Connection=False;Encrypt=True;PersistSecurityInfo=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

我也尝试过 Wireshark,我对此知之甚少,但似乎暗示了一些活动(192.168.1.101 是我的机器,207.46.63.13 是 SQL Azure 服务器):

1 0.000000 192.168.1.101 207.46.63.13 TCP [重组 PDU 的 TCP 段] 2 0.116269 207.46.63.13 192.168.1.101 TCP ms-sql-s > bmc-net-adm [ACK] Seq=1 Ack=2 Win=8444 Len=0 3 2.091928 192.168.1.101 207.46.63.13 TCP [重组PDU的TCP段] 4 2.209371 207.46.63.13 192.168.1.101 TCP ms-sql-s > kmscontrol [ACK] Seq=1 Ack=2 Win=5969 Len=0 5 2.352974 192.168.1.101 207.46.63.13 TCP [重组PDU的TCP段] 6 2.469444 207.46.63.13 192.168.1.101 TCP ms-sql-s > vaultbase [ACK] Seq=1 Ack=2 Win=8625 Len=0

任何想法可能会发生什么?

【问题讨论】:

    标签: asp.net-mvc entity-framework azure connection-string azure-sql-database


    【解决方案1】:

    我在DomainContext : DbContext 类中加大了调试力度,发现连接字符串始终指向 SQL Express,即使 web.config 中的所有条目都指向其他地方。然后我意识到问题出在构造函数中传递给基类的参数。

    在某个地方,我认为这个参数是要使用的数据库的名称。现在我意识到它是连接字符串条目的名称(或连接字符串本身)。

    【讨论】:

    • 这正是给我带来麻烦的原因。谢谢。
    【解决方案2】:

    我在实例化我的 DBContext 时明确设置了我的连接字符串:

    public class DB: DbContext ..
    
    var databaseConnectionString = 
      "Server=tcp:private.database.windows.net;Database=privateDB;UID=private@private;Password=private;Trusted_Connection=False;Encrypt=True"
    
    var db = new DB(databaseConnectionString);
    

    【讨论】:

      【解决方案3】:

      找到您计算机的 IP 并在 SQL Azure 的防火墙中创建一个规则以允许它通过。应该是被屏蔽了。

      更多细节:

      1. 转到您的 Azure 仪表板。

      2. 点击数据库

      3. 点击您的存储帐户,然后点击数据库服务器

      4. 点击防火墙规则,然后添加

      5. 只需输入您的 IP 作为 IP 范围开始 IP 范围结束

      【讨论】:

      • 我已经有了(幸运的是仪表板告诉你它是什么 IP),我仍然可以通过 SSMS 连接?
      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 2012-01-14
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多