Asp.net mvc Can';无法从应用程序连接到SQL Azure,但可以从SSMS连接
我已经设置了一个SQLAzure实例,可以连接到它,而SQLServerManagementStudio不会出现任何问题。但是,当我的应用程序尝试连接时,会发生以下错误: 与网络相关或特定于实例的 建立数据库时出错 连接到SQL Server。服务器 找不到或无法访问。 验证实例名称是否正确 正确,并且SQL Server是 配置为允许远程访问 连接。(提供者:SQL网络) 接口,错误:26-错误定位 服务器/实例(已指定) 我使用的是实体框架代码First4.1和ASP.NETMVC3。我的应用程序最初是使用SQL Express成功开发的。现在我正在使用(该应用程序最终也会移动到那里,但开发仍在继续) 既然SSMS工作正常,我猜它应该归结为web.config?我尝试了连接字符串名称的所有组合:Asp.net mvc Can';无法从应用程序连接到SQL Azure,但可以从SSMS连接,asp.net-mvc,entity-framework,azure,connection-string,azure-sql-database,Asp.net Mvc,Entity Framework,Azure,Connection String,Azure Sql Database,我已经设置了一个SQLAzure实例,可以连接到它,而SQLServerManagementStudio不会出现任何问题。但是,当我的应用程序尝试连接时,会发生以下错误: 与网络相关或特定于实例的 建立数据库时出错 连接到SQL Server。服务器 找不到或无法访问。 验证实例名称是否正确 正确,并且SQL Server是 配置为允许远程访问 连接。(提供者:SQL网络) 接口,错误:26-错误定位 服务器/实例(已指定) 我使用的是实体框架代码First4.1和ASP.NETMVC3。我的应
<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.000000192.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
你知道会发生什么吗?找到你机器的IP,并在SQL Azure的防火墙中创建一条规则让它通过。它可能被封锁了 更多详情:
我在实例化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);
我在
DomainContext:DbContext
类中加快了调试,发现连接字符串始终指向SQL Express,即使web.config中的所有条目都指向别处。然后我意识到问题是在构造函数中传递给基类的参数
在这个过程中的某个地方,我认为这个参数就是将要使用的数据库的名称。现在我意识到它是连接字符串条目的名称(或连接字符串本身)。我已经有了(幸运的是,仪表板告诉您它是什么IP),而且我可以通过SSMS进行连接?这正是造成我问题的原因。谢谢
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);