Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Can';无法从应用程序连接到SQL Azure,但可以从SSMS连接_Asp.net Mvc_Entity Framework_Azure_Connection String_Azure Sql Database - Fatal编程技术网

Asp.net mvc Can';无法从应用程序连接到SQL Azure,但可以从SSMS连接

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。我的应

我已经设置了一个SQLAzure实例,可以连接到它,而SQLServerManagementStudio不会出现任何问题。但是,当我的应用程序尝试连接时,会发生以下错误:

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

我使用的是实体框架代码First4.1和ASP.NETMVC3。我的应用程序最初是使用SQL Express成功开发的。现在我正在使用(该应用程序最终也会移动到那里,但开发仍在继续)

既然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.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的防火墙中创建一条规则让它通过。它可能被封锁了

更多详情:

  • 转到Azure仪表板

  • 单击数据库

  • 单击存储帐户,然后单击数据库服务器

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

  • 只要在IP范围开始和结束时输入IP即可


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