2013-01-14 44 views
1

我正在使用Visual Studio 2012和SQL Server Express 2012.我使用「Internet應用程序」模板創建了一個MVC 4 Web應用程序。爲什麼我的MVC 4授權檢查拋出異常?

我想在我的SQL Server 2012 Express實例上(而不是模板的MDF)使用現有的數據庫。我修改了我的web.config來指向我的本地SQL Express實例,並刪除了模板生成的MDF。我的web.config有:

<add name="DefaultConnection" 
    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Administration;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> 

股票代碼成員具有呼叫初始化DB:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

一旦應用程序會調用,表得到管理數據庫中創建爲我所期望的。我可以創建用戶並將其填寫到管理中。我可以填充角色表並通過代碼將角色添加到用戶的配置文件中,並驗證它是否已完成。例如:

Roles.GetRolesForUser("kristian"); // = string[] { "Administrator" } 

但是,如果我嘗試使用基於角色的授權,如:

[Authorize(Roles = "Administrator")] 

我得到以下異常:

Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed. 

它給出了一個很長討厭的堆棧跟蹤,使我認爲它仍然試圖創建一個MDF文件:

[SqlException(0x80131904):無法生成由於無法啓動用戶實例的進程而導致SQL Server的用戶實例。連接將被關閉。] System.Data.SqlClient.SqlInternalConnection.OnError(SqlException異常,布爾breakConnection,動作1 wrapCloseInAction) +5295167 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +69 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +30 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +317 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +889 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重試,DbConnectionOptions USEROPTIONS,DbConnectionInternal &連接)5311874 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(的DbConnection ExternalConnection,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):無法連接到SQL Server數據庫。] 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 ,字符串connectionString,字符串數據庫,字符串dbFileName,SqlFeatures功能,布爾安裝)+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

這個歡樂包底部的行使我認爲它與現在刪除的MDF('System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile')有關。我在這裏糾正?或者模板實施的授權不完整?

如果有人已經處理了這個問題,或者知道我的屬性用法失敗的原因,我將非常感謝幫助。

+1

您是否嘗試在整個解決方案(Ctrl Shift F)中搜索「MDF」並替換? –

回答

1

我有這個相同的問題。這似乎與沒有正確初始化SimpleMembership有關。嘗試確保使用[InitializeSimpleMembership]或直接撥打Database.SetInitializer<UsersContext>(null);

相關問題