As funcionalidades Membership, Roles e Profile do ASP.NET 2.0 vem por padrão habilitadas. A questão é que essa configuração padrão demanda ter instalado na máquina onde corre a aplicação (geralmente a máquina do desenvolvedor), o SQL Server Express.
Em uma aplicação recém criada não haverá nenhuma configuração no arquivo Web.Config. Se analisarmos algumas seções que estão presentes do arquivo machine.config, temos:
<connectionStrings>
<add name=”LocalSqlServer” connectionString=”data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true” providerName=”System.Data.SqlClient”/>
</connectionStrings>
<membership>
<providers>
<add name=”AspNetSqlMembershipProvider” type=”System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” connectionStringName=”LocalSqlServer” …. />
</providers>
</membership>
Com isso, quando iniciamos o ASP.NET Configuration, ele irá tentar acessar (ou criar) esta base de dados. Se não tiver o SQL Server Express instalado, esse processo resultará em um erro. Para resolver, voce tem duas alternativas:
-
Instalar o SQL Server Express.
-
Configurar para um servidor SQL Server existente. Se optar por essa alternativa, voce deve configurar o seu arquivo Web.Config da seguinte forma:
<?xml version=”1.0″?>
<configuration>
<connectionStrings>
<clear/>
<add
name=”SqlConnectionString”
connectionString=”Data Source=local;Initial Catalog=BaseDeDados;Integrated Security=True;”/>
</connectionStrings>
<system.web>
<membership defaultProvider=”SqlMembershipProvider”>
<providers>
<clear/>
<add
name=”SqlMembershipProvider”
type=”System.Web.Security.SqlMembershipProvider”
connectionStringName=”SqlConnectionString”
….. />
</providers>
</membership>
</system.web>
</configuration>
É importante notar que o elemento <clear /> remove a conexão e o provider do membership que são configurados por padrão. Além dessa configuração prévia, voce precisará também criar os objetos (tabelas, stored procedures e views) necessários para que essas funcionalidades trabalhem. Para isso, voce utilizará o utilitário aspnet_regsql.exe e pode encontrar maiores informações aqui.
Era esse mesmo o problema.
Muito obrigado pela ajuda !
Olá Israel,
vou colocar minhas configurações do meu web.config
<connectionStrings>
<clear/>
<add name="instiadConnectionString" connectionString="Data Source=WHE-LAPTOPSQLEXPRESS;Initial Catalog=instiad;Integrated Security=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
<roleManager enabled="true" defaultProvider="RoleManagerInstiad">
<providers>
<add connectionStringName="instiadConnectionString"
name="RoleManagerInstiad" type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
<membership defaultProvider="InstiadCustomMemberShipProvider" >
<providers>
<clear/>
<add
name="InstiadCustomMemberShipProvider"
minRequiredPasswordLength="2"
minRequiredNonalphanumericCharacters="0"
type="System.Web.Security.SqlMembershipProviderSystem, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="instiadConnectionString"
applicationName="instiad"
passwordFormat="Hashed"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
writeExceptionsToEventLog="true"
/>
</providers>
</membership>
Ao fazer o login, ele acusa erro em membership no argumento type="System.Web.Security.SqlMembershipProviderSystem, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Você saberia o por que desse erro? será que é necessário criar um custom do membership?
abraços
Boas,
O correto é SqlMembershipProvider e não SqlMembershipProviderSystem.
Oi Israel, obrigado por responder.
alterei corretamente como voce mencionou:
<membership defaultProvider="InstiadCustomMemberShipProvider" >
<providers>
<clear/>
<add
name="InstiadCustomMemberShipProvider"
minRequiredPasswordLength="2"
minRequiredNonalphanumericCharacters="0"
[b]type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"[/b]
connectionStringName="instiadConnectionString"
applicationName="instiad"
passwordFormat="Hashed"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
writeExceptionsToEventLog="true"
/>
</providers>
</membership>
E mesmo assim, ele esta acusando erro nessa linha…
Consegui corrigir o erro alterando o machine.config adicionando a minha connection string:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
[b] <add name="instiadConnectionString" connectionString="Data Source=WHE-LAPTOPSQLEXPRESS;Initial Catalog=instiad;Integrated Security=true"
providerName="System.Data.SqlClient" />[/b]
</connectionStrings>
parece que a minha aplicaçào web não está enchergando a minha connection string do web.config. Mas na parte de codificação em C# eu consigo conversar com o banco sem nenhum problema….
Será que não tem como corrigir esse problema?
Brigadão Israel
Boas,
Acredito que não. Acho que há algum detalhe que está esquecendo.
Olá estou com o um problema com o membership que eh o seguindo localmente o membership funciona perfeitamente (tanto com o banco de dados localmente como naum)
Mas quando dou um publish no no sistema apesar de a comunicação do banco de dados estar funcionando perfeitamente não consigo acessar os dados do membership (logar, criar usuario etc). Um fato estranho tbm eh que o sistema do aspnet para logar fikou em ingles.
Alguem tem alguma solução ?
Obrigado
Boas Marcus,
Se a comunicação com a DB está OK, já tentou verificar o atributo ApplicationName: http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx ?