2015-11-19 59 views
0

我正在将网站和数据库从azure重定位到本地服务器(sql server 2008 r2)。 我成功复制了数据库并在IIS中设置了网站。我可以导航到该网站,但它不会登录。移动数据库和网站后登录失败

我的堆栈跟踪

Message: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The target principal name is incorrect.) 

堆栈跟踪:在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection,行动1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParserStateObject.SNIWritePacket(SNIHandle handle, SNIPacket packet, UInt32& sniError, Boolean canAccumulate, Boolean callerHasConnectionLock) at System.Data.SqlClient.TdsParserStateObject.WriteSni(Boolean canAccumulate) at System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode, Boolean canAccumulate) at System.Data.SqlClient.TdsParser.TdsLogin(SqlLogin rec) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource 1重试,DbConnectionOptions USEROPTIONS,DbConnectionInternal &连接) 的系统。 Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry,DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) at System.Data.SqlClient。 SqlConnection.Open() at System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context,Boolean revertImpersonate) at System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString,Boolean revertImpersonation) at System.Web.Security.SqlMembershipProvider .GetPasswordWithFormat(字符串username,布尔updateLastLoginActivityDate,的Int32 &状态,字符串&密码,的Int32 &了passwordFormat,字符串& passwordSalt,的Int32 & failedPasswordAttemptCount,的Int32 & failedPasswordAnswerAttemptCount,布尔& isApproved,日期时间& lastLoginDate,日期时间& lastActivityDate) 在System.Web.Security.SqlMembershipProvider.CheckPassword(字符串username,字符串密码,布尔updateLastLoginActivityDate,布尔failIfNotApproved,字符串&盐,的Int32 &了passwordFormat) 在System.Web.Security.SqlMembershipProvider.ValidateUser(字符串username,字符串密码) 在EbpWebSite.Account.login.Page_PreLoad(对象发件人,EventArgs的) 在System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)

我缺少的东西?这一举措是否搞砸了登录密码盐?我的登录表是标准的aspnet_Membership,Roles,Users设置。我只是从Azure复制到本地数据库。第一行会显示,我的连接字符串已正确更新。

由于建议增加的ConnectionString

<add name="EbpCloud" connectionString="Server=EBP-OCON-SQL1;User ID=dbread22;Password=*****;Trusted_Connection=True;Encrypt=True;Connect Timeout=0;Database=EbpReporting;" /> 

原始字符串是服务器= TCP:server.database.windows.net

网站在同一台服务器作为数据库在本地居住。 (我需要有本地服务器名的一部分吗?) 我登录代码:

 if (Membership.ValidateUser(userName, passWord)) { 
    FormsAuthentication.Initialize(); 
    FormsAuthentication.SetAuthCookie(userName, false); 
    using (var conn = Utilities.SqlConnectionEbp(Utilities.DatabaseEbp.EbpReporting)) { 
     // call stored procedure to get the user default session settings 
     using (var cmd = new SqlCommand("aspnet_UserDefaultSessionSettings", conn)) { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@UserName", userName)); 
     // Check Sql State and open connection 
     if (!conn.State.Equals(ConnectionState.Open)) 
      conn.Open(); 
     using (var reader = cmd.ExecuteReader()) { 
      while (reader.Read()) { 
      Session["userName"] = userName; 
      Session["forceResetPassword"] = passWord.Equals("[email protected]"); 
      Session["displayName"] = reader["displayName"].ToString(); 
      Session["instanceId"] = Convert.ToInt16(reader["instanceId"]); 
      Session["userEmail"] = reader["email"].ToString(); 
      Session["userId"] = new Guid(reader["UserId"].ToString()); 
      //Session["clinicList"] = Utilities.GetClinicList(); 
      } 
     } 
     } 
    } 
    Response.Redirect("/administration/supplierinvoice.aspx", false); 
    } 

被叫公用事业类:

 public static class Utilities 
    { 
    public enum DatabaseEbp 
    { 
     Ebp, EbpReporting, Master, ebpCIS 
    } 
    /// <summary> 
    /// SqlConnectionEBP - EBP Connection object 
    /// </summary> 
    /// <returns>SqlConnection</returns> 
    public static SqlConnection SqlConnectionEbp(DatabaseEbp database) { 
     var connString = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["EbpCloud"].ToString()); 
     connString.InitialCatalog = database.ToString(); 
     var conn = new SqlConnection(connString.ToString()); 
     return conn; 
    } 

回答

0

有时它是简单的事情。网站和数据库都驻留在同一台物理服务器上,因此将连接字符串更改为

<add name="EbpCloud" connectionString="Data Source=localhost;Initial Catalog=ebpreporting;Persist Security Info=True;User ID=dbread22;Password=*****" providerName="System.Data.SqlClient" /> 

它工作。

0

可以从网络发布的ConnectionStrings标签。 config文件,以及您的code_behind(您连接到数据库的位置)?我从来没有tryed使用标准的认证,但我怀疑它使用了一些面向服务器的功能(如你所说,你移动到蔚蓝的服务器后,错误已显示)

+0

加入,并动过天青后发生的错误。它工作得很好,只是没有本地。 – alemus

+0

我从来没有类似的情况因为我从来没有使用过Azure ......对不起 – Khazratbek

相关问题