7

何時間も検索しましたが、役立つものが見つかりません。

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.'

「展開/FTPユーザー」がまったく設定されていないため、これはBSです。

どんな助けでも大歓迎です。

4

4 に答える 4

5

アプリが間違った接続文字列を使用しているようです。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;

管理ポータルで適切なものを見つけることができます。

ここに画像の説明を入力

ここに画像の説明を入力

于 2013-09-27T02:41:11.837 に答える
1

これは古いトレッドであることは承知していますが、私の解決策を共有したいと思います。

私の問題は、Azure 上の SQL に接続して、ローカル マシンでアプリケーションを実行できることでした。また、Azure SQL でログインの検証が行われました。

Azure でアプリを実行するとログインできませんでしたが、匿名アクセスのページはデータベースに問題なく接続します。

Azure 管理では、プロジェクトが公開されても DefaultConnection の接続文字列は変更されません。この接続は、プロジェクトが Azure に初めて発行されたときに作成したと思います。デフォルトの接続文字列を web.config と同じに設定すると、すべてがスムーズに機能します。

于 2015-09-26T19:44:26.657 に答える
0

最近同じ問題が発生しましたが、私の場合は原因が異なりました。SQL Azure データベースに接続するようにMicrosoft ASP.NET ユニバーサル プロバイダーを構成しました。その後、ASP.NET 構成ツールを使用してロールを有効にしていましたが、これが私の構成のようでした。

<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>  

問題を解決しました。すべての役割を再構成する必要がありました。なぜなら、それらはローカル ファイルのどこかに座っていたからです。

于 2014-05-20T07:53:11.040 に答える