我已经设置了一个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
任何想法可能会发生什么?
答案 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的防火墙中创建规则以通过它。它可能被封锁了。
更多详情:
转到Azure信息中心。
点击数据库
点击您的存储帐户,然后点击数据库服务器
单击防火墙规则,然后单击添加
只需输入您的IP作为IP范围启动和 IP范围完成