2013-09-26 62 views
5

我搜索了幾個小時,找不到任何有用的信息。Azure網站無法連接到SQL Azure數據庫

在Windows Azure中使用ASP.NET MVC4。

當我在開發機器上本地運行站點時,使用SQL Azure連接字符串。我可以訪問遠程數據庫沒有任何問題。然而,當我部署網站,並嘗試從[mysite的] .azurewebsites.com我收到以下錯誤超時後訪問它(在Azure的連接字符串是相同的;複製並粘貼):

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) 

Description: An unhandled exception occurred during the execution of the current web request. 
Please review the stack trace for more information about the error and where it originated in 
the code. 

SQLExpress database file auto-creation error: 


The connection string specifies a local Sql Server Express instance using a database location 
within the application's App_Data directory. The provider attempted to automatically create the 
application services database because the provider determined that the database does not exist. 
The following configuration requirements are necessary to successfully check for existence of 
the application services database and automatically create the application services database: 

1.If the application is running on either Windows 7 or Windows Server 2008R2, special 
configuration steps are necessary to enable automatic creation of the provider database. 
Additional information is available at: http://go.microsoft.com/fwlink/?LinkId=160102. If the 
application's App_Data directory does not already exist, the web server account must have read 
and write access to the application's directory. This is necessary because the web server 
account will automatically create the App_Data directory if it does not already exist. 
2.If the application's App_Data directory already exists, the web server account only requires 
read and write access to the application's App_Data directory. This is necessary because the web 
server account will attempt to verify that the Sql Server Express database already exists within 
the application's App_Data directory. Revoking read access on the App_Data directory from the 
web server account will prevent the provider from correctly determining if the Sql Server 
Express database already exists. This will cause an error when the provider attempts to create a 
duplicate of an already existing database. Write access is required because the web server 
account's credentials are used when creating the new database. 
3.Sql Server Express must be installed on the machine. 
4.The process identity for the web server account must have a local user profile. See the readme 
document for details on how to create a local user profile for both machine and domain accounts. 


Source Error: 


An unhandled exception was generated during the execution of the current web request. 
Information regarding the origin and location of the exception can be identified using the 
exception stack trace below.  

Stack Trace: 



[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) +5296071 
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean 
callerHasConnectionLock, Boolean asyncClose) +558 
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds 
connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean 
trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5308555 
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) +5311099 
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) 
+5313314 
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 

我嘗試使用FTP,但每次我嘗試「設置部署憑證」時間在遠程web.config文件看我得到這個錯誤:

Failed to Set Credentials with error: 'Publishing username is already used. Specify a different publishing username.' 

這是BS,因爲沒有「部署/ FTP用戶」組在所有。

任何幫助,將不勝感激。

+0

」連接字符串使用應用程序的App_Data目錄中的數據庫位置 指定本地Sql Server Express實例。「 您的連接字符串似乎有錯誤,因爲它指向本地開發計算機上的一個資源,該資源未在蔚藍框上創建。 你可以發佈你的web.config?你在使用SQL Azure數據庫嗎? –

+0

我有同樣的問題http://stackoverflow.com/questions/19346938/a-network-releated-or-instance-specific-error-occurred-while-establishing-a-conn但我第一次搜索時,我沒有' t看到這篇文章。我發現在服務器的配置文件中存在'AspNetSqlMembershipProvider'使用的連接字符串名稱'LocalSqlServer',並且導致了問題。我仍然沒有解決方案。 –

回答

3

看來,該應用程序正在使用錯誤的連接字符串。有時MVC 4/EF5具有如下默認連接字符串:

<add name="MovieDBContext" 
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" 
    providerName="System.Data.SqlClient" 
/> 

對我來說,它依然使用的默認連接,這就是爲什麼在本地工作。

一些策略:

1,得到其連接字符串您的DbContext使用如下:

var myconn = db.Database.Connection.ConnectionString; //set this to a ViewBag for example 

2,只是可以肯定,使用相同的名稱創建在web.config中的連接字符串您的DbContext或在構造函數中設置連接名稱。

我現在你已經有了SQL Azure的CONNSTRING,但我會在這裏發表太,因爲它可以幫助別人:

默認SQL Azure的連接字符串

Server=tcp:[serverName].database.windows.net;Database=myDataBase; 
User ID=[LoginForDb]@[serverName];Password=myPassword;Trusted_Connection=False; 
Encrypt=True; 

你能找到您的管理門戶中正確的一個。

enter image description here

enter image description here

+0

我有同樣的問題,並嘗試了你的建議。我有2個DataContexts,並且我已經通過ViewBag將Database.Connection.Connectionstring發送到一個視圖,該視圖由於需要連接到數據庫而無法加載。當頁面從ViewBag加載連接字符串時,匹配我在web.config中設置爲默認連接的正確SQL Azure字符串。我也嘗試在兩個DataContexts的構造函數中設置連接,但是這似乎沒有幫助解決原始問題。任何其他建議修復?謝謝。 –

0

最近我有同樣的問題,但在我的情況的原因是不同的。我配置了Microsoft ASP.NET Universal Providers以連接到我的SQL Azure數據庫。稍後,當我使用ASP.NET Configuration Tool來啓用角色時,這就是我的配置。

<membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="hidden" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="0" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
    </providers> 
</membership> 
<roleManager enabled="true" /> 

roleManager的部分由配置工具加入。然而,在沒有萬能供應商這樣的事情發生的時候,這個工具就寫成了。

看什麼缺失?是的,roleManager部分沒有定義任何連接字符串。然而,在我的本地機器上一切正常,因爲這個缺少的連接字符串導致本地MDF被創建,現在應用程序可以存儲這些角色,但在Azure中,這不起作用。我用類似這樣的方式指定連接字符串來解決它:

<membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="hidden" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="0" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
    </providers> 
</membership> 
<roleManager enabled="true" defaultProvider="DefaultRoleProvider"> 
    <providers> 
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" connectionStringName="hidden" applicationName="/" /> 
    </providers> 
</roleManager> 

解決了這個問題。我必須重新配置我的所有角色,因爲他們坐在本地文件的某處。

0

我知道這是一個古老的步伐,但我想分享我的解決方案。

我的問題是,我可以在本地計算機上運行與Azure上的SQL連接的應用程序。並且登錄驗證在Azure SQL上完成。

在Azure上運行該應用程序時,無法登錄,但具有匿名訪問的頁面可以精確地連接到數據庫。

在Azure Mangement中,發佈項目時,DefaultConnection的連接字符串不會更改。我認爲這是我第一次將項目發佈到Azure時創建的連接。 將默認連接字符串設置爲與web.config中相同之後,所有內容都可以平滑地運行。

1

我解決這個問題的方式是通過FTP進入站點並下載並查看web.config中的連接字符串。

這不是我所期望的。然後我刪除它並修復了該問題,然後重新發布了該網站。

我再次FTP'ed到網站,現在它確實有正確的連接字符串。

在我的情況下,問題是我使用的是web.release.config文件,但它的配置不正確,所以沒有真正使用它。 「