ASP .NET -  Usando MemberShip, roles e Profiles com o Microsoft Access


Um pouco antes de lançar a versão final da ASP .NET 2.0,  a versão beta continha os provedores para MemberShip, Roles e Profiles para SQL Server e para o Microsoft Access. Na liberação da versão final somente o provedor para SQL Server foi mantido.

A nova versão  ASP .NET 2.0 trouxe um número de serviços que são comuns a muitas aplicações para web como a autenticação e autorização (MemberShip e Roles), perfis de usuários (Profile) , estado da sessão e a personalização. Nas versões anteriores você tinha que implementar estes recursos via código mas com a ASP .NET 2.0 eles estão disponíveis como serviços que você pode usar . Veja na figura abaixo alguns destes serviços:

Então, se você conhece o modelo de providers da ASP .NET 2.0 sabe como eles são poderosos e fáceis de implementar e usar com o SQL Server e também com o SQL Server 2005 Express Edition. Ocorre que não é sempre que se tem acesso ao SQL Server 2005, mesmo na versão Express, em web servers , quer seja pela não disponibilidade, quer seja pelo preço que se tem que pagar.  Já o suporte ao Microsoft Access é quase universal.  Neste cenário cabem algumas perguntas:

Então a migração para ASP .NET 2.0 para quem tinha a sua aplicação usando o Microsoft Access como é que fica ?
Podemos implementar o modelo de providers para MemberShip, Roles e Profiles no Microsoft Access ?

É obvio que sim, na verdade você pode implementar o seu próprio modelo para qualquer banco de dados inclusive o Microsoft Access.

Para o Microsoft Access você pode fazer o download do exemplo criado pela Microsoft neste link: Microsoft Access Providers ou Aqui

Neste artigo eu vou mostrar como você pode usar o modelo de Providers para o Microsoft Access.

Para acompanhar este artigo você deverá possuir os seguintes recursos:

Eu vou usar as versões Express , desta forma todos poderão acompanhar.

Após efetuar o download , um arquivo .vsi (Visual Studio Community Content Installer), você deve executar o arquivo(clique duas vezes sobre o mesmo) que será instalado um template que pode ser acessado ou no Visual Studio 2005/2008 ou no Visual C# Express Edition.

Será copiado um arquivo chamado ASP.NET Access Providers.zip na pasta de templates do Visual Studio conforme a figura abaixo:

Este é o template(modelo) que foi instalado e você não precisa fazer mais nada apenas criar um novo projeto baseado neste template. Vamos fazer isso...

Veja na figura abaixo o modo de acesso nas duas ferramentas:

Visual Studio 2008 - Create New Projet Visual C# Express Edition - Create Project

Criando o assembly .ddl no Visual C# Express

Crie um novo projeto no  Visual C# Express Edition  conforme indicado acima;

Clicando no botão OK teremos um novo projeto criado com todos os arquivos que você precisa para construir , configurar e rodar uma aplicação com os Providers para o Microsoft Access. A sua solução deverá apresentar os seguintes arquivos:

Vejamos os arquivos mais importantes :

Arquivo Descrição
web.config Contém todas as configurações que você precisa para configurar o sua aplicação ASP .NET 2.0 para trabalhar com o provider.
ASPNetDB.mdb Este é o arquivo que faz o papel do ASPNETDB.mdf para o SQL Server e é usado pela aplicação. Quando você usa com o SQL Server o arquivo é criado automaticamente; no caso do Microsoft Access isso não ocorre e você terá que usar este banco de dados para no seu web site.
*.cs Contém a implementação para os providers : Membership, Roles, Personalization e Profiles. 

Os arquivos readme.txt e eula.rtf podem ser apagados , depois de lidos, que não serão necessários.

O próximo passo é alterar o nome do Assembly criado pelo projeto. Vamos alterar o nome de ASP.NET Access Providers1 para SampleAccessProviders pois este nome será usado para configurar o projeto. Será criado o arquivo  SampleAccessProviders.dll. Clique com o botão direito sobre o nome do projeto e selecione Properties , na aba Application altere o nome confirme a figura abaixo:

Salve a alteração e fecha a janela de Properties.

Agora vamos salvar o projeto, clique em Salvar ou pressione CTRL+S. Observer na janela Save Project o local onde estamos salvando o projeto.

Vamos compilar o projeto clicando no menu Buld Solution F6; isso irá criar o arquivo SampleAccessProviders.dll. na pasta \bin\Release da solução.

Com o assembly criado temos tudo pronto para criar os Providers para o Microsoft Access. Vamos fazer isso criando e configurando a nossa aplicação web para usar o novo provider. Vamos então fechar o Visual C# .

Criando a aplicação web no Visual Web Developer Express

Nesta etapa vamos criar um novo web site que vai usar os providers para o Microsoft Access e usar o Web Site Administration Tool (WSAT) para criar novos usuários e perfis que serão armazenados no novo banco de dados.

Como estamos começando vamos criar um novo web site, porém quando você entender como funciona o provider para o Access você poderá aplicá-lo a um web site já existente. Vamos com calma...

Abra o Visual Web Developer 2008 Express Edition e selecione no menu File -> New Web site;

Em templates selecione ASP .NET Web Site, selecione a linguagem (eu escolhi Visual Basic) e informe o nome do web site como Access_Providers;

Clique no botão OK para criar o novo web site. Na janela Solution Explorer serão criados dois arquivos :  Default.aspx e web.config e a pasta App_Data.

Apague o arquivo web.config pois iremos usar outra versão para este arquivo. Vamos agora configurar o site para usar o Access providers.

Clique com o botão direito sobre o nome do projeto e selecione a opção Add ASP .NET Folder -> Bin. Com isso iremos criar uma pasta Bin no projeto onde iremos copiar o assembly .dll do Access Providers.

Agora vamos copiar os arquivos web.config  para o raiz e o arquivo ASPNetDB.mdb para a pasta App_Data, a partir do projeto criado no Visual C# para o projeto criado no Visual Web Developer. Você pode fazer isso abrindo duas janelas lado a lado e arrastar e soltar os arquivos conforme abaixo:

Agora copie o arquivo SampleAccessProviders.dll  a partir da pasta bin\Release para a pasta Bin no projeto Web no Visual Web Developer.

Ao final a sua janela Solution Explorer deverá apresentar os seguintes arquivos:

Vejamos a seguir um resumo sobre o conteúdo dos arquivos usados no projeto até o momento:

- O arquivo web.config incluído no projeto contém as definições de configuração que informam ao ASP .NET para usar em tempo de execução os providers do MS Access e o banco de dados ASPNetDB.mdb ao invés do provider padrão para o SQL Server.

-  O arquivo ASPNetDB.mdb incluído no projeto é quase idêntico ao da versão para o SQL Server 2005 que é criado de forma automática pelo ASP .NET em tempo de execução.(Existem diferenças que iremos detalhar adiante)

- O assembly SampleAccessProviders.dll  incluído na pasta /Bin contém toda a lógica para que o provider funcione usando o banco de dados MS Access. 

Antes de continuar vamos dar uma olhada no arquivo web.config mostrando alguns pontos importantes:

1- No início do arquivo temos a definição da string de conexão :

<connectionStrings>
     <
add name="
AccessFileName" connectionString="~/App_Data/ASPNetDB.mdb" providerName="System.Data.OleDb"/>
</
connectionStrings
>

Note que o caminho aponta para o arquivo .mdb na pasta App_Data onde o ~ será expandido em tempo de execução para o caminho completo da usa aplicação web.

Note que o arquivo ASPNetDB.mdb contém toda a estrutura já criada para dar suporte a utilização do provider para MS Access. Veja abaixo a estrutura deste arquivo:

No esquema exibido temos as tabelas que são usadas para armazenar informações do usuário, autorização, perfis, etc. Além das tabelas existem diversas consultas que são usadas para criar e modificar dados. Na maioria dos casos você não vai precisar alterar a estrutura destas tabelas nem das consultas.

2- O elemento MemberShip diz ao ASP .NET em tempo de execução para usar o AccessMembershipProvider para todos os serviços membership;

	<membership defaultProvider="AccessMembershipProvider">
			<providers>
				<clear/>
				<add name="AccessMembershipProvider" 
					type="Samples.AccessProviders.AccessMembershipProvider, SampleAccessProviders" 
					connectionStringName="AccessFileName" 
					enablePasswordRetrieval="false" 
					enablePasswordReset="false" 
					requiresUniqueEmail="false" 
					requiresQuestionAndAnswer="false" 
					minRequiredPasswordLength="1" 
					minRequiredNonalphanumericCharacters="0" 
					applicationName="SampleSite" 
					hashAlgorithmType="SHA1" 
					passwordFormat="Hashed"/>
			</providers>
		</membership>

Bem, chega de teoria e vamos mostrar como usar efetivamente os providers para MS Access em nosso web site.

Acompanha a continuação no artigo :   ASP .NET -  Usando MemberShip, roles e Profiles com o Microsoft Access 2

Eu sei é apenas ASP .NET mas eu gosto ...


José Carlos Macoratti