Providers - tabela aspnet_roles sem registro
Boa tarde!
Tenho uma solution com 2 tipos de projeto, um web application e um class library. No projeto class library tenho uma classe que adiciona uma role, ela faz uso da classe Roles do namespace System.Web.Security (eu adicionei o namespace System.Web no projeto da class library).
Após adicionar a role, se eu acessar pelo Visual Studio o menu Project >> ASP.NET Configuration, e na ferramenta de configuração eu acessar a aba Security e o link "Create or Manage roles", consigo visualizar os papéis que adicionei pelo projeto.
Porém, se eu efetuar um SELECT na tabela aspnet_roles, não me retorna nenhum registro.
Vocês saberiam me auxiliar para eu identificar o que está acontecendo?
Obrigado!
Carlos Nogueira
Curtidas 0
Respostas
Fabio Mans
06/05/2010
Você tem certeza que está no banco correto?
O banco está na pasta App_Data ou no Banco SQL?
Fabio
O banco está na pasta App_Data ou no Banco SQL?
Fabio
GOSTEI 0
Fabio Mans
06/05/2010
Você tem certeza que está no banco correto?
O banco está na pasta App_Data ou no Banco SQL?
Fabio
O banco está na pasta App_Data ou no Banco SQL?
Fabio
GOSTEI 0
Carlos Nogueira
06/05/2010
Sim sim, tenho certeza sim, conferi a connectionstring no meu arquivo web.config e está apontando para o banco que efetuei o SELECT.
O que você sugere? Você acha que seria interessante eu criar outro banco no SQL Server e executar a ferramenta aspnet_regsql.exe para gerar as tabelas do provider (acho que é assim que se fala né?) neste novo banco e tentar efetuar o cadastro do role novamente?
O que você sugere? Você acha que seria interessante eu criar outro banco no SQL Server e executar a ferramenta aspnet_regsql.exe para gerar as tabelas do provider (acho que é assim que se fala né?) neste novo banco e tentar efetuar o cadastro do role novamente?
GOSTEI 0
Fabio Mans
06/05/2010
Seu banco está no App_Data ou no SQL?
GOSTEI 0
Carlos Nogueira
06/05/2010
Esta no SQL
GOSTEI 0
Fabio Mans
06/05/2010
Quer fazer um backup e passar o arquivo para que eu veja?
GOSTEI 0
Carlos Nogueira
06/05/2010
Sim, eu efetuei o backup mas não consigo localizar onde posso fazer upload do mesmo. Eu fui no botão "File Upload" e ele abriu uma janela dizendo que o recurso não está disponível, pediu para usar o "Associar Download" na Central do Autor. Você sabe como posso proceder?
GOSTEI 0
Fabio Mans
06/05/2010
Pode mandar para o meu email fgmans@gmail.com
Fabio
Fabio
GOSTEI 0
Carlos Nogueira
06/05/2010
Fabio,
Tentei te encaminhar o anexo para o e-mail informado no post anterior mas recebi a mensagem de erro abaixo:
I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can delete your own text from the attached returned message.
The mail system
<fgmans@gmail.com>: host gmail-smtp-in.l.google.com[209.85.210.12] said:
550-5.1.1 The email account that you tried to reach does not exist. Please
try 550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596
12si6460233yxe.100 (in reply to RCPT TO command)
Só para confirmar, o e-mail é fgmans@gmail.com ?
GOSTEI 0
Fabio Mans
06/05/2010
Desculpa, fgamans@gmail.com
Obrigado.
Obrigado.
GOSTEI 0
Carlos Nogueira
06/05/2010
Fabio,
Foi encaminhado para o seu e-mail o banco de dados conforme sua solicitação. O mesmo está em SQL Server 2005.
GOSTEI 0
Fabio Mans
06/05/2010
No banco tem dois usuários, maria e ricardo
SELECT TOP 1000 [ApplicationId]
,[UserId]
,[UserName]
,[LoweredUserName]
,[MobileAlias]
,[IsAnonymous]
,[LastActivityDate]
FROM [UBIKStart].[dbo].[aspnet_Users]
SELECT TOP 1000 [ApplicationId]
,[UserId]
,[UserName]
,[LoweredUserName]
,[MobileAlias]
,[IsAnonymous]
,[LastActivityDate]
FROM [UBIKStart].[dbo].[aspnet_Users]
GOSTEI 0
Carlos Nogueira
06/05/2010
Isso mesmo, se você efetuar um SELECT na tabela aspnet_roles, verá que não tem nenhum perfil cadastrado, porém, se você acessar a ferramenta WST para este banco, verá que existem dois perfis (roles) cadastrados no banco.
GOSTEI 0
Fabio Mans
06/05/2010
Muito estranho, realmente não tem roles, recrie a tabela.
GOSTEI 0
Carlos Nogueira
06/05/2010
Oi Fabio,
Eu fiz o que você informou no último post mas não deu certo. Continua o mesmo problema, mas ai decidi realizar mais uma vez a operação conforme os passos abaixo:
- Abri meu projeto do tipo "Web Application" e removi meu arquivo web.config;
- Abri a ferramenta aspnet_regsql;
- Removi as tabelas do provider do banco que havia criado;
- Exclui o banco de dados que havia criado;
- Criei um banco de dados com outro nome;
- Abri a ferramenta aspnet_regsql;
- Adicionei as tabelas do provider para o banco recem criado;
- Abri meu projeto do tipo "Web Application";
- Adicionei um arquivo web.config nele;
- Adicionei uma connectionString para o novo banco de dados;
- Acrescentei o elemento membership dentro do elemento "system.web" como você pode ver abaixo:
<membership defaultProvider="AspNetSqlProvider">
<providers>
<add name="AspNetSqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ConexaoSQL"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
passwordFormat="Hashed"
applicationName="/"/>
</providers>
</membership> - Abri a ferramenta WST; - Fui na aba Security; - Selecionei a opção de autenticação "From the internet"; - Selecionei a opção "Enable roles". Após ter selecionado para habilitar as roles, foi demonstrado a mesma quantidade de roles que havia cadastrado anteriormente, no outro banco que havia excluido no passo acima. Foi então que recordei que você perguntou se eu estava usando SQL ou App_Data (tanto que te mandei o banco do SQL). Bem, ai eu vi na estrutura do meu projeto "Web Application" uma pasta App_Data (pelo Solution Explorer) e como estava vazia, por via das dúvidas, eu exclui a mesma do projeto. Então, abri novamente a ferramenta WST mas a quantidade se encontrava como antes. Desta forma, fui pelo Windows Explorer e ainda vi na estrutura do projeto a pasta App_Data, e dentro dela estava um banco SQL chamado ASPNETDB (deve ser o banco que ele usa para o providers quando não aponta banco existente, se eu não estiver enganado). Sendo assim, decidi apagar o arquivo fisico do banco bem como a pasta App_Data. Ao voltar para o Visual Studio e chamar a ferramenta WST, fui na aba Security e a quantidade de roles havia zerado, mas ao mesmo tempo notei que a ferramenta WST criou novamente a pasta App_Data com o banco ASPNETDB quando acessei a aba Security (percebi a criação da pasta pelo Windows Explorer). Então, quando faço cadastro de um perfil (role) com uma página que tenho de teste no projeto, por alguma razão ele esta desconsiderando a connectionString que informei no elemento membership e está levando em consideração a pasta App_Data (eu acho). No projeto, tenho uma página de teste, que tem referência para um projeto Class Library. Neste projeto Class Library, tem uma classe chamada Perfil (eu adicionei nesse projeto a referência System.Web para ter acesso as classes Membership, Roles, e etc) que utiliza a classe Roles para adicionar o perfil informado pelo usuário na página fazendo uso do método CreateRole. Você acredita que pode ser o tipo de projeto Web que estou usando que está gerando este problema ou, a referência que fiz na minha Class Library para System.Web não entendeu o que foi informado no meu projeto Web Application pelo web.config e por isso, está usando o banco padrão do providers? Ou, tem alguma outra idéia? Fico no aguardo, obrigado pela atenção!
<providers>
<add name="AspNetSqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ConexaoSQL"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
passwordFormat="Hashed"
applicationName="/"/>
</providers>
</membership> - Abri a ferramenta WST; - Fui na aba Security; - Selecionei a opção de autenticação "From the internet"; - Selecionei a opção "Enable roles". Após ter selecionado para habilitar as roles, foi demonstrado a mesma quantidade de roles que havia cadastrado anteriormente, no outro banco que havia excluido no passo acima. Foi então que recordei que você perguntou se eu estava usando SQL ou App_Data (tanto que te mandei o banco do SQL). Bem, ai eu vi na estrutura do meu projeto "Web Application" uma pasta App_Data (pelo Solution Explorer) e como estava vazia, por via das dúvidas, eu exclui a mesma do projeto. Então, abri novamente a ferramenta WST mas a quantidade se encontrava como antes. Desta forma, fui pelo Windows Explorer e ainda vi na estrutura do projeto a pasta App_Data, e dentro dela estava um banco SQL chamado ASPNETDB (deve ser o banco que ele usa para o providers quando não aponta banco existente, se eu não estiver enganado). Sendo assim, decidi apagar o arquivo fisico do banco bem como a pasta App_Data. Ao voltar para o Visual Studio e chamar a ferramenta WST, fui na aba Security e a quantidade de roles havia zerado, mas ao mesmo tempo notei que a ferramenta WST criou novamente a pasta App_Data com o banco ASPNETDB quando acessei a aba Security (percebi a criação da pasta pelo Windows Explorer). Então, quando faço cadastro de um perfil (role) com uma página que tenho de teste no projeto, por alguma razão ele esta desconsiderando a connectionString que informei no elemento membership e está levando em consideração a pasta App_Data (eu acho). No projeto, tenho uma página de teste, que tem referência para um projeto Class Library. Neste projeto Class Library, tem uma classe chamada Perfil (eu adicionei nesse projeto a referência System.Web para ter acesso as classes Membership, Roles, e etc) que utiliza a classe Roles para adicionar o perfil informado pelo usuário na página fazendo uso do método CreateRole. Você acredita que pode ser o tipo de projeto Web que estou usando que está gerando este problema ou, a referência que fiz na minha Class Library para System.Web não entendeu o que foi informado no meu projeto Web Application pelo web.config e por isso, está usando o banco padrão do providers? Ou, tem alguma outra idéia? Fico no aguardo, obrigado pela atenção!
GOSTEI 0
Carlos Nogueira
06/05/2010
Fabio,
Consegui solucionar o problema! O que estava acontecendo é que não havia definido de forma adequada no web.config o provedor do Role. Com a alteração que fiz, funcionou direitinho, apareceu quando efetuei SELECT e quando acessei pela ferramenta WST. O elemento roleManager ficou dessa maneira:
<roleManager enabled="true"
defaultProvider="AspRoleSqlProvider"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All">
<providers>
<clear />
<add connectionStringName="ConexaoSQL"
applicationName="/"
name="AspRoleSqlProvider"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager> Antes o meu elemento no web.config estava só com o atributo "enable", rs... Consegui com um ajuda de um artigo vinculado a você após algumas pesquisas na internet, no site aspneti. O endereço é: http://www.aspneti.com.br/Customizando+o+Membership+e+Role+Provider+344,0.aspx. Só preciso entender ele um pouco melhor (não achei o arquivo do banco para baixar) e vou tentar implementa-lo para o que preciso na empresa. Pode finalizar este chamado, e obrigado pela sua atenção! Até mais
defaultProvider="AspRoleSqlProvider"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All">
<providers>
<clear />
<add connectionStringName="ConexaoSQL"
applicationName="/"
name="AspRoleSqlProvider"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager> Antes o meu elemento no web.config estava só com o atributo "enable", rs... Consegui com um ajuda de um artigo vinculado a você após algumas pesquisas na internet, no site aspneti. O endereço é: http://www.aspneti.com.br/Customizando+o+Membership+e+Role+Provider+344,0.aspx. Só preciso entender ele um pouco melhor (não achei o arquivo do banco para baixar) e vou tentar implementa-lo para o que preciso na empresa. Pode finalizar este chamado, e obrigado pela sua atenção! Até mais
GOSTEI 0