ASP.NET Profile – Parte 2


Como já foi dito anteriormente, os Profiles, por default, são armazenados em um banco do dados do tipo Microsoft Access dentro da pasta App_Data da aplicação. Haverá casos, onde temos a nosso dispor, uma base de dados SQL Server, que é infinitamente mais robusta que um simples arquivo MDB do Microsoft Access, e com isso podemos utilizá-la para que a aplicação grave neste servidor SQL Server as informações/dados referentes aos Profiles da mesma.

Para que isso seja possível, temos no ASP.NET o que chamamos de um Profile Provider, que permitirá você especificar onde as informações serão salvas, definindo isso em seu arquivo de configuração (Web.Config ou Machine.Config).

O ASP.NET nos fornece, já intrinsicamente, um provider/classe chamado SqlProfileProvider. Esta classe deriva de uma classe base chamada ProfileProvider, ficando assim flexível para quando você precisar criar seu próprio Profile Provider para um banco de dados específico, como por exemplo MySQL, Oracle, SyBase, etc.

Mas antes de utilizarmos o SqlProfileProvider temos que fazer algumas configurações fora da nossa aplicação, ou seja, rodarmos um aplicativo “*.exe” que vem juntamente com o .NET Framework 2.0, chamado aspnet_regsql, que você poderá encontrá-lo no seguinte path: WindowsMicrosoft.NETFramework[versao]. Este processo se faz necessário porque através dele, é que são geradas as Stored Procedures dentro do servidor SQL Server. Stored Procedures que são executadas pelo SqlProfileProvider para a manipulação dos dados dos Profiles.

Feito este processo, o que se tem a fazer agora é configurar o Provider, no nosso caso, o SqlProfileProvider no arquivo Web.Config da aplicação. Abaixo um trecho do código do arquivo Web.Config onde é configurado o SqlProfileProvider a nível da nossa aplicação (se desejar definir este Provider para todas as aplicações, poderá fazer esta configuração no arquivo Machine.Config):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<configuration>
    <system.web>
        <connectionStrings>
            <add name=”CNProfiles”
                connectionString=”Server=localhost;Trusted_Connection=true;database=DBProfiles” />
        </connectionStrings>
 
        <authentication mode=”Forms” />
        <anonymousIdentification enabled=”true” />
        <profile defaultProvider=”SQLProvider” />
 
        <providers>
            <add name=”SQLProvider”
                type=”System.Web.Profile.SqlProfileProvider”
                connectionStringName=”CNProfiles” />
        </providers>
 
        <profile>
            <properties>
                <add name=”Nome” defaultValue=”” allowAnonymous=”true” />
                <add name=”Email” defaultValue=”” allowAnonymous=”true” />
            </properties>
        </profile>
    </system.web>
</configuration>
 
Código 1 – Configurando o Profile no arquivo Web.Config.

Como vemos, dentro do elemento providers temos o nome e o tipo (a classe) que no nosso caso é a SqlProfileProvider que fará o trabalho para gerir os Profiles dentro do SQL Server. Temos também um atributo chamado connectionStringName onde indicamos qual é a string de conexão, que informará o servidor e o banco de dados que será utilizado. Caso você tenha customizado uma classe para um banco de dados qualquer, o tipo (type) mudará, onde voce deverá informar o tipo da classe criada, inclusive o Namespace.

Agora basta utilizar os Profiles normalmente, como foi explicado na primeira parte deste artigo, e os dados já serão gravados dentro do SQL Server especificado na Connection String do arquivo Web.Config.

Gerenciando Profiles – Relatórios

Temos uma classe chamada ProfileManager que nos permite gerenciar os Profiles da nossa aplicação. É através desta classe, que nos é fornecido uma série de métodos e propriedades estáticos para as tarefas mais comuns, como por exemplo excluir, exibir, recuperar Profiles, etc.

Com isso, podemos criar uma aplicação Console ou mesmo um Windows Service que gerencie os Profiles da nossa aplicação, colocando-lá todas as manipulações que desejamos fazer com os Profiles. Abaixo os métodos e propriedades da classe ProfileManager:

Membro Descrição
 DeleteInactiveProfiles Exclui os Profiles inativos, baseando-se em uma data que lhe é informada.
 DeleteProfile Exclui um Profile específico baseando-se no username.
 DeleteProfiles Exclui vários Profiles baseando-se em um Array de usernames.
 FindInactiveProfilesByUserName Retorna uma coleção de objetos do tipo ProfileInfo que estão inativos desde uma data e username específico.
 FindProfilesByUserName Retorna uma coleção de objetos do tipo ProfileInfo de acordo com um username específico.
 GetAllInactiveProfiles Retorna uma coleção de objetos do tipo ProfileInfo com Profiles inativos baseando-se em uma data.
 GetAllProfiles Retorna uma coleção de objetos do tipo ProfileInfo com todos os Profiles.
 GetNumberOfInactiveProfiles Retorna um número inteiro que indica a quantidade de Profiles inativos baseando-se em uma data específica.
 GetNumberOfProfiles Retorna um número inteiro que indica a quantidade de Profiles.
 ApplicationName Nome da aplicação que armazena o Profile.
 AutomaticSaveEnabled Indica que o Profile será salvo automaticamente no final da execução da página.
 Enabled Resgata um valor booleano que indica se o Profile está ou não ativo na aplicação.
 Provider Resgata o provider padrão da aplicação.
 Providers Resgata uma coleção de providers de uma aplicação.

Ainda temos um objeto bastante importante chamado ProfileInfo, que contém informações de um Profile específico. Veremos na tabela abaixo as propriedades desta classe:

Membro Descrição
 IsAnonymous Indica se é ou não um Profile anônimo.
 LastActivityDate Indica última data que o Profile foi acessado.
 LastUpdatedDate Indica última data que o Profile foi atualizado.
 Size Resgata o tamanho do Profile.
 UserName Resgata o username do Profile.

Abaixo um exemplo de como utilizar a classe ProfileManager dentro de uma aplicação qualquer:

1
2
3
4
 
Sub Page_Load()
    Me.GridView1.DataSource = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All)
    Me.GridView1.DataBind()
End Sub
 
Código 2 – Utilizando a classe ProfileManager.

Como o método GetAllProfiles retorna uma coleção de objetos do tipo ProfileInfo, podemos tranquilamente definí-lo como DataSource de um container de dados para exibi-lo para o usuário assim como é mostrado no código 2, logo acima.

CONCLUSÃO: Nesta situação, os providers e os Profiles são bastante úteis, onde é encapsulado uma porção de códigos para nos ajudar a gerenciar essas informações que temos em aplicações Web/ASP.NET. Claro que se quiser utilizar uma outra base de dados, não SQL Server, terá mesmo que customizar um Provider para esta, herdando da classe base ProfileProvider. E com o uso da classe ProfileManager, temos acesso e gerenciamento dos Profiles da nossa aplicação, evitando trabalhar diretamente com código SQL.

Anúncios

2 comentários sobre “ASP.NET Profile – Parte 2

  1. Fala Israel Aéce, bacana sua explicação sobre Profile, porém não estou conseguindo fazer com que o web.config aceite o parâmetro <providers><add name="SQLProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="CNProfiles" /></providers>.

    Ele diz "Seção de configuração não reconhecida system.web/providers."..
    Não sei onde tenho que colocar esse <providers> para o VS aceitar..

    Agradeço muito se puder me ajudar com isso Israel.

    Abraço.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s