Ich habe eine grundlegende ASP.NET MVC 4-Website, die ich auf Azure-Websites hosten. Die Authentifizierung ist die Formularauthentifizierung und wurde nicht von der Standardvorlage angepasst. Jedes Mal, wenn ich meine Site erneut öffne, hängt sie einfach mit einem sehr langen Timeout (vielleicht ein paar Minuten), bis sie mir endlich eine Fehlermeldung anzeigt. Ich kann wiederherstellen, indem ich die Cookies für die Seite in meinem Browser lösche und neu lade.Authentifizierungsprobleme nach der Veröffentlichung von MVC 4 App auf Azure
Zunächst wurde das Problem nur versucht, Seiten zuzugreifen, die eine Authentifizierung erforderlich, aber dann habe ich das meinem _Layout.cshtml
geteilt:
@if (User.IsInRole("Admin"))
{
<li>@Html.ActionLink("Admin", "Index", "Admin")</li>
}
, die überhaupt bedeutet nun keine Seiten zugänglich sind, nachdem eine neue veröffentlichen, und so Ich kann nicht einmal auf den Logout-Link klicken, was eine andere Möglichkeit war, das Problem zu beheben.
Habe ich etwas falsch konfiguriert? Obwohl ich eine Problemumgehung habe, die ich selbst verwenden kann, wird dies keine gute Erfahrung für Benutzer der Website sein, nachdem ich ein Update veröffentlicht habe.
BEARBEITEN: von den ELMAH-Protokollen scheint es, als ob Formularauthentifizierung versucht, eine SQL Express-Datenbank zu erstellen, wenn ich IsInRole aufruft. Ich kann nicht sehen, warum dies so wäre, da meine Formularauthentifizierung für die Verwendung meiner SQL Azure-Datenbank eingerichtet ist.
System.Web.HttpException (0x80004005): Unable to connect to SQL Server database. ---> System.Data.SqlClient.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)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString)
ClientConnectionId:00000000-0000-0000-0000-000000000000
at System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString)
at System.Web.Management.SqlServices.SetupApplicationServices(String server, String user, String password, Boolean trusted, String connectionString, String database, String dbFileName, SqlFeatures features, Boolean install)
at System.Web.Management.SqlServices.Install(String database, String dbFileName, String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.EnsureSqlExpressDBFile(String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation)
at System.Web.Security.SqlRoleProvider.GetRolesForUser(String username)
at WebMatrix.WebData.SimpleRoleProvider.GetRolesForUser(String username)
at System.Web.Security.RolePrincipal.IsInRole(String role)
Mark Ich habe diese Frage in meinem eigenen ähnlichen hier verwiesen ... http://stackoverflow.com/questions/24149044/two-chrome-sessions-on-the-same-machine-one-will-connect -zu-unserer-azurblauen-Website und wenn Ihre Antwort unten funktioniert, müssen Sie wirklich das Kopfgeld auf Ihre Weise drücken ... – hawbsl