2014-10-27 40 views
1

我有一個帶有帳戶控制器的ASP.NET MVC5 Internet應用程序。Roles.RoleExists()導致SQL網絡接口,錯誤:26

我想補充的角色,給用戶的singup 3個角色之間選擇的選擇,我的註冊方法如下:

 [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if (!Roles.RoleExists("user")) 
      { 
       Roles.CreateRole("user"); 
      } 

      if (!Roles.RoleExists("superuser")) 
      { 
       Roles.CreateRole("superuser"); 
      } 

      if (!Roles.RoleExists("admin")) 
      { 
       Roles.CreateRole("admin"); 
      } 

      var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
      var result = await UserManager.CreateAsync(user, model.Password); 
      if (result.Succeeded) 
      { 


       var currentUser = UserManager.FindByName(user.UserName); 

       string userType = null; 
       switch (model.Type) 
       { 
        case 1: 
         userType = "user";       
         break; 
        case 2: 
         userType = "superuser"; 
         break; 
        case 3: 
         userType = "admin"; 
         break; 
        default: 
         return View(model); 
         break; 
       } 


       var roleresult = UserManager.AddToRole(currentUser.Id,userType); 
       return RedirectToAction("Index", "Home"); 
      } 
      AddErrors(result); 
     } 

     return View(model); 
    } 

當我嘗試註冊和代碼達到if (!Roles.RoleExists("user"))網站掛起約10秒,我得到以下錯誤:

SQL Network Interfaces, error: 26 


    [SqlException (0x80131904): Der opstod en netværksrelateret eller forekomstspecifik fejl, da det blev forsøgt at oprette forbindelse til SQL Server. Serveren blev ikke fundet, eller der var ikke adgang til den. Kontroller, at forekomstnavnet er korrekt, og at SQL Server er konfigureret til at tillade fjernforbindelser. (provider: SQL Network Interfaces, error: 26 - Fejl ved søgning efter angivet server/forekomst.)] 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5340655 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244 
    System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5350915 
    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) +922 
    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, SessionData reconnectSessionData) +518 
    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +5353725 
    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 oldConnection, DbConnectionInternal& connection) +5355926 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +146 
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +16 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +94 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +110 
    System.Data.SqlClient.SqlConnection.Open() +96 
    System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +75 

[HttpException (0x80004005): Der kan ikke oprettes forbindelse til SQL Server-databasen.] 
    System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +130 
    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中我加<roleManager enabled="true" />到的System.Web和我的ConnectionString如下:

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=lmjzf199gd.database.windows.net;Initial Catalog=lenioDb;Persist Security Info=True;User ID=lenio;Password=*******;Integrated Security=False;Encrypt=False;TrustServerCertificate=False;" providerName="System.Data.SqlClient" /> 

顯然沒有設置口令的連接字符串中「*******」。

我使用的數據庫是天藍色的。

回答

0

<roleManager enabled="true">你必須指定你的角色提供者以及正確的連接字符串(這是問題)。例如:

<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" defaultProvider="DefaultRoleProvider"> 
    <providers> 
     <add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" 
     type="System.Web.Security.SqlRoleProvider"/> 
    </providers> 
</roleManager> 

但首先確保您的數據庫具有均已通過安裝aspnet_regsql(see this link)工作所需的默認提供的表和SQL過程。

+0

當我改變它我現在得到這個錯誤:無法找到存儲過程'dbo.aspnet_CheckSchemaVersion'。當我嘗試註冊時。 – Niclassg 2014-10-27 12:53:14

+0

檢查更新後的答案(關於'aspnet_regsql'的部分) – SmartDev 2014-10-27 13:01:00

+0

您的答案解決了我最初的問題,但導致新的問題。我稍後會再發表一個問題。 – Niclassg 2014-10-27 13:44:47

相關問題