Fórum Problema com profile #27234

12/03/2010

0

Minha aplicação rodava perfeitamente mas quando mudei para o windows server 2008 e iis 8 comecaram alguns problemas. Um deles é quanto ao profile, na minha aplicação agora está dando erro de objeto indefinido. Que comando eu poderia usar para criar o profile de um usuário por conta do meu código. Antes ele  criava o objeto automaticamente. Grato desde já.    
Ademilso Peres

Ademilso Peres

Responder

Posts

14/03/2010

Luiz Maia

Ademilso,   Atualmente nas aplicações ASP.NET utilizamos Cookies e variáveis de sessão (Session) para armazenar informações específicas de um determinado usuário.
O Profile é bem semelhante ao objeto Session atual, onde para cada usuário que temos em nossa aplicação Web é criado um Profile para ele. Até então funciona da mesma forma que o objeto Session. Mas o mais interessante está por vir, ou seja, quando fechamos o browser, a Session é perdida. Já utilizando o Profile ele se mantém persistente mesmo depois do usuário fechar o browser. Pode ser isto que o IIS 8 esta dando problemas. 

Isso se deve graças ao uso, por default, do Microsoft Access, onde são armazenadas estas informações, que fica dentro de uma pasta chamada Data, dentro da sua aplicação. Vale lembrar que é perfeitamente possível o uso de uma outra Base de Dados para termos uma melhor performance, como por exemplo SQL Server ou Oracle.

Além da vantagem de se manter persistente mesmo depois de fechado o Browser, o Profile ainda tem uma vantagem, que particularmente considero fantástica, que é fortemente tipado (strongly typed), ao contrário da Session, que por sua vez aceitava um Object. Além disso, o IntelliSense já reconhece as propriedades, tornando assim o desenvolvimento mais rápido e menos propício a erros.

Definindo o Profile

Você deve utilizar o arquivo Web.Config para gerar a estrutura que o teu objeto Profile irá ter. Temos à nossa disposição o elemento profile, onde definimos as propriedades que vamos disponibilizar. O cenário é termos dentro do Profile, o Nome e Email do Usuário. Abaixo o código do arquivo Web.Config que define o Profile:

1 2 3 4 5 6 7 8 9 10 11 12 13 <configuration>     <system.web>         <authentication mode="Forms" />         <anonymousIdentification enabled="true" />           <profile>             <properties>                 <add name="Nome" defaultValue="" allowAnonymous="true" />                 <add name="Email" defaultValue="" allowAnonymous="true" />             </properties>         </profile>     </system.web> </configuration> Código 1 - Definindo a estrutura do Profile no arquivo Web.Config.
Analisando o código acima, vemos o elemento anonymousIdentification que especificará que o Profile será criado para usuários anônimos ou autenticados. Se definí-lo com False e tentar atribuir algum valor as propriedades em runtime e o usuário não estiver autenticado, uma Exception será lançada. Já o atributo allowAnonymous é requerido quando as propriedades são usadas com usuários anônimos.

O código para atribuir um valor as propriedades, fica da seguinte forma:

1 2 Profile.Email = "israel@projetando.net" Profile.Nome = "Israel Aéce" Código 2 - Acessando as propriedades do Profile.
O Intellisense já passa a interpretar as propriedades que definimos no Web.Config.
Repare que o tipo do dado não é definido. Isso porque o default, quando não informamos é System.String. Caso queria definir um tipo Inteiro ou qualquer outro tipo, tem o atributo type, onde define-se o tipo de dado que queira para aquela propriedade.

Profile Groups

Quando começamos a criar várias propriedades dentro do arquivo Web.Config para utilizarmos no Profile, começamos a ter a necessidade de separar algumas delas em grupos para que facilite a compreensão e organização. Para isso temos o elemento group, onde dentro dele colocamos as propriedades pertinentes ao mesmo. Se quisermos adicionar um grupo chamando Endereco, contendo Rua, Cidade, Estado, fazemos:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <configuration>     <system.web>         <authentication mode="Forms" />         <anonymousIdentification enabled="true" />           <profile>             <properties>                 <add name="Nome" defaultValue="" allowAnonymous="true" />                 <add name="Email" defaultValue="" allowAnonymous="true" />                 <group name="Endereco" />                     <add name="Rua" defaultValue="" allowAnonymous="true" />                     <add name="Cidade" defaultValue="" allowAnonymous="true" />                 </group>             </properties>         </profile>     </system.web> </configuration> Código 3 - Definindo grupos do Profile no arquivo Web.Config.
E para acessá-los, o código fica:

1 2 3 4 Profile.Email = "israel@projetando.net" Profile.Nome = "Israel Aéce" Profile.Endereco.Rua = "Magnólias, das" Profile.Endereco.Cidade = "Valinhos" Código 4 - Acessando as propriedades com grupos do Profile.
Responder

Gostei + 0

15/03/2010

Ademilso Peres

Tudo isso que voce escreveu eu já sabia, eu estou com um problema muito especifico, por isso postei está duvida, a minha aplicação não está criando o objeto profile por algum motivo que gostaria de saber. Segue o codigo  void Page_Load(object sender, EventArgs e) { try { if (!Page.IsPostBack) { if (Session["Rodou"] == null) { if (!this.Profile.IsAnonymous)   // Nessa linha esta ocorrendo NullReferenceException mas no windowns 2003 funcionar perfeitamente. Voce poderia me ajudar?  
Responder

Gostei + 0

16/03/2010

Luiz Maia

Ademilso, Infelizmente não tenho meios para testar seu codigo, ja que não temos o WS 2008 e nem o IIS 8 instalados em nossas máquinas, portanto, tive que fazer uma consulta para ver se achava algo relacionado ao seu problema. Acredito que você também ja o tenha feito. O que encontrei foi que realmente há uma imcompatibilidade quanto as versões dos Profiles para Versão 1 (Windows 2000, Windows XP, Windows Server 2003) e Versao 2  (Windows Vista, Windows Server 2008). Pelo que entendi, este problema esta diretamente ligado ao Sistema Operacional, e não tem haver com codificação, portanto, foge do nosso escopo do serviço de Suporte.   Mas, ja que estou procurando, e achei algo que talvez te interesse, você tem acesso ao servidor 2008?   Aguardo Att Luiz Maia
Responder

Gostei + 0

16/03/2010

Ademilso Peres

Sim, tenho acesso a maquina que roda o windows server 2008. 
Responder

Gostei + 0

17/03/2010

Luiz Maia

Veja este artigo (em ingles) que talvez esclareça algo, mas como te disse, não esta no escopo de desenvolvimento e não temos o ws 2008 nem o IIS 2008 instalado, o que nos impossibilita de tentar resolver o problema através de uma simulação, ok?     Vou cancelar o chamado, assim você não perde estes creditos!!     For the general roaming profile, here is a step-to-step practice: 1. Prepare the roaming user profile - Log on to a Windows Server 2008 with the domain user account to produce a user profile. Log off the computer. - Log on to the Windows Server 2008 with a domain administrator account. - Click Start--->right-click Computer--->Properties--->Advanced System Settings--->Advanced--->User Profiles Settings…--->Settings--->Copy To. Copy the profile to the file server, such as '\\filesrv\profiles\username.v2' Note: A ".v2" suffix to the name of the user profile folder on the file server must be added to distinguish between version 1 and version 2 profiles. - In Permitted to use, click Change. Type the proper users or groups and then click OK. 2. Prepare the user Profile path setting - In the Active Directory Users and Computers, type the profile location such as '\\filesrv\profiles\username' in the user's Profile path attributes. Note: Do NOT add ".v2" to the Profile path of the user object. This indicates that for Windows Server 2008 it will load the profile from 'username.v2' folder and for former Windows operating systems they will load from 'username' folder if it exists. If you manually create user profile folder, please check the NTFS and share permission on the roaming profile share folder. - Locate the roaming profile share folder, and check the NTFS permission to make sure that the user, SYSTEM, and administrators have Full Controller permission on their folders and all sub-folder under the roaming profile folder has inherited proper permission. - Check the share permission to ensure that Everyone has Full Control permission.
Please pay attention to the Event logs in Windows Logs--->Application. User Profile Service will log events to show the reason why the roaming profile is not applied. http://www.pcfixreview.com   Abraços Att Luiz Maia
Responder

Gostei + 0

22/03/2010

Ademilso Peres

gostaria da opinião de outro consultor. 
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar