Migrar o site do ASP.NET quebra o provedor de associados
-
06-07-2019 - |
Pergunta
Eu tenho um site ASP.NET que foi desenvolvido no .NET Framework V2 conectando ao SQL Server 2000. Estou tentando migrá -lo para um novo servidor que possui o .NET Framework v3.5, juntamente com o SQL Server 2008. Fiz o backup do banco de dados e o restaurei no novo servidor de banco de dados. Eu movi o site e atualizei o web.config. Agora, no entanto, não posso fazer login no site. Eu executei o SQL Profiler para ver o que estava acontecendo e este é o Proc armazenado que é executado quando tento fazer login.
exec dbo.aspnet_Membership_GetPasswordWithFormat @ApplicationName=N'dev',
@UserName=N'AffiliateBob', @UpdateLastLoginActivityDate=1,
@CurrentTimeUtc='2009-10-26 20:43:23.7130000'
Observe o formato do parâmetro @CurrentTimeUTC. Quando coloco isso no SQL Management Studio e executei a seguinte mensagem de erro.
Msg 8114, Level 16, State 1, Procedure aspnet_Membership_GetPasswordWithFormat, Line 0
Error converting data type varchar to datetime.
Aqui está a seção de associação do meu web.config.
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="999"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="999"
passwordStrengthRegularExpression=""
applicationName="dev"/>
</providers>
</membership>
Solução
Isso acabou sendo um web.config
questão. Que eu resolvi criando um novo limpo web.config
arquivar e adicionar seções do antigo web.config
.
Outras dicas
Funciona ok se você alterar a data para 2009-10-10? Nesse caso, você tem um problema de idioma/localidade. O ASP.NET está enviando o parâmetro de data no MM/DD e o SQL Server está esperando DD/MM ou vice-versa. Verifique esta configuração no ASP.NET e para o seu login do SQL Server.
Esta pode não ser a melhor solução em alguns casos, mas isso acabou resolvendo meu problema:
http://forums.asp.net/t/1398826.aspx/1
Originalmente, eu tentei procurar o provedor de membros armazenado Procs e começar a mover todos os dados do DateTime para o DateTime2, mas tenho certeza de que você pode imaginar a lata de worms que se abre. De qualquer forma, o problema de conversão do DateTime é bom a saber.