无法从应用程序连接到SQL Azure,但可以从SSMS连接

时间:2011-06-03 09:31:58

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

我已经设置了一个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 [TCP segment of a reassembled PDU]
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 [TCP segment of a reassembled PDU]
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 [TCP segment of a reassembled PDU]
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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我在实例化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);

答案 2 :(得分:0)

找到您的计算机的IP并在SQL Azure的防火墙中创建规则以通过它。它可能被封锁了。

更多详情:

  1. 转到Azure信息中心。

  2. 点击数据库

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

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

  5. 只需输入您的IP作为IP范围启动 IP范围完成