Azure网站无法访问Azure DB

时间:2012-12-05 13:47:13

标签: azure web-config azure-sql-database azure-storage azure-web-sites

这个错误让我发疯,我甚至无法重现它!

我已将我的网站发布到Windows Azure和SQL Azure,效果很好。 突然间,它不起作用,我得到了这个令人讨厌的错误:

这是我得到的错误:

http://jsfiddle.net/shimmy/pcS7g/embedded/result

这是错误:

  

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

我想强调一下,我可以通过SSMS或VS访问SQL并查看我的表等。

我不知道是什么导致每次部署后一次又一次地发生这种恼人的错误。

堆栈追踪:

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295167
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5307115
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +920
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) +434
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +5309659
   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +38
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +5311874
   System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +143
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +83
   System.Data.SqlClient.SqlConnection.Open() +96
   System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +76

[HttpException (0x80004005): Unable to connect to SQL Server database.]
   System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +131
   System.Web.Management.SqlServices.SetupApplicationServices(String server, String user, String password, Boolean trusted, String connectionString, String database, String dbFileName, SqlFeatures features, Boolean install) +89
   System.Web.Management.SqlServices.Install(String database, String dbFileName, String connectionString) +27
   System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString) +386

更新

以下是服务器web.config上显示的连接字符串的副本:

<connectionStrings>
  <add name="Context" connectionString="Data Source=tcp:abcdefg.database.windows.net,1433;Initial Catalog=Database;User Id=shimmy@tcp:abcdefg;Password=my123password;" providerName="System.Data.SqlClient" />
  <add name="Storage" connectionString="DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey==" />
</connectionStrings>

我甚至试图从服务器的web.config中完全删除连接字符串。我不清楚这个App_Data事物的来源!

我的DbContext看起来像这样:

public Context()
  : base("name=Context") //I also tried "Context" alone
{
}

2 个答案:

答案 0 :(得分:10)

我知道这是一个非常古老的帖子,但我只是在和同样的问题作斗争......

我有同样的问题,虽然我不明白,但我发现如果我当前登录(在我的网站上,而不是Azure控制台),我需要退出然后重新登录这个数据库错误消失了。这对我来说没有意义,但是在部署之后它对我有用。我已经有很多次部署过,一切都很好(不需要注销/登录)。有时它跳进这种模式。不确定那里发生了什么。

它与web.config中的连接字符串无关 - 它们都被正确转换。

答案 1 :(得分:6)

您的应用程序似乎希望能够在SQL Server Express的本地实例上使用项目中的附加文件来设置数据库。错误消息中的关键行是:

  

连接字符串指定本地Sql Server Express实例   使用应用程序的App_Data目录中的数据库位置。

您可能需要更新配置文件中的连接字符串以匹配Azure网站中的连接字符串。使用SQL Server设置网站后,可以在Azure仪表板中获取此信息,并通过相同的仪表板进行设置。

以下是执行该操作的良好说明:http://blog.davidebbo.com/2012/09/managing-database-connections-in-azure.html