Inscreva-se no RSS do [MVP] Adriano Bertucci
Newsletter
Siga-me no Twitter.
Facebook
LinkedIn
Flickr

Microsoft Techday – Primeira etapa

Ola Pessoal

No último dia 12 de junho tive o prazer de participar de mais um evento da comunidade técnica brasileira… a primeira edição do Microsoft Techday organizada pelo amigo Idevar.

Nesta primeira etapada falei sobre a evolução das aplicações web com Silverlght. Segue algumas fotos do evento…

Microsoft TechDay - Idevar 18 - Adriano BertucciMicrosoft Techday - Primeira Etapa

 

 

 

 

 

 

 

 

Confira o álbum completo aqui.

O material do evento pessoal vou disponibilizar após a segunda etapa que será dia 26 de junho de 2010.

Aguardo todos lá!

Falhas no Intellisense do Visual Studio 2010

Pessoal

Em alguns computadores o intellisense do Visual Studio 2010 RC esta travando constantemente, isso foi detecado pela Microsoft a qual já providenciou um FIX para o problema.

Quem estiver com este problema acesse: http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662 , efetue o download do FIX e pronto!

Visual Studio 2010 RC

Ola Pessoal,

Gostaria de avisar aos interessados que a Microsoft lançou ontem (08/02/2010) a versão Release Candidate do Visual Studio 2010.

Para os assinantes MSDN, já podem iniciar os downloads… Já para os demais usuário teremos a liberação à partir do dia 10/02/2010.

Vamos efetuar o download e começar as discussões sobre as novidades da ferramenta.

Quem gostou acesse… Visual Studio 2010 RC http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

Detalhe… antes de instalar a nova versão para que já tinha o Beta 2, é preciso removê-lo… então siga as instruções: http://support.microsoft.com/kb/312383/pt

Treinamentos Microsoft

Ola pessoal

Sempre em busca do conhecimento… a Microsoft possui um site o Innovation Lab, trata-se de um site com diversos treinamentos on-line, sobre C#, Silverlght, Windows 7 entre outros!

Agora com novidades .. você pode rodar os treinamentos Off-line, tudo isso graças aos recursos do Silverlight 3.0… portanto que gosta de conhecimento vale a pena conferir! Acessem: Microsoft Innovation Lab.


Bookmark and Share

Visual Studio 2010 Beta 2

Ola Pessoal,

Hoje para quem tem assinatura da MSDN Subscribe, a partir do dia 21/10, a Microsoft disponibilizara o Visual Studio 2010 Beta 2.

Quem quiser ir vendo um pouco dele temos o vídeo do Brian Keller http://channel9.msdn.com/shows/10-4/10-4-Episode-33-Downloading-and-Installing-Visual-Studio-2010-Beta-2/ e também informações no link http://msdn.microsoft.com/pt-br/vstudio/dd582936(en-us).aspx

Estou baixando o meu agora! Aguardem mais novidades!


Bookmark and Share

Microsoft Web Platform Installer 2.0 Beta

Ola Pessoal,

Para facitar cada vez mais o desenvolvimento para ambientes web a Microsoft disponibilizou o Web Plataform Installer 2.0, um aplicativo que instala e configura as principais ferramentas para se trabalhar com sistemas web. Agora em sua versão 2.0 a Microsoft coloca como novidade a integração com PHP, ou seja, instalou o aplicativo você tem a possibilidade de ja ter um ambiente completo inclusive com integração a linguagem PHP.

Para quem quiser conferir só acessar:

http://www.microsoft.com/Web/downloads/platform.aspx


Bookmark and Share

Autenticação ASP.NET Personalizada – Usando Rules

Ola Pessoal

Muita gente pergunta como criarmos um sistema de autenticação eficiente em ASP.NET, sem utilizar Profile e a estrutura de tabelas própria do ASP.NET. Pois bem vou mostrar aqui uma maneira bem simples de criar este sistema de forma personalizada utilizando também regras de acesso.

Bom para efetuar nossa exmplicação vamos partir de um exemplo real. Imaginando que criamos uma estrutura de tabelas em nosso banco capaz de armazenar as informações dos usuários, como dados básicos e perfis de acesso, esta estrutura pode ser modelada da maneira que preferir. Abaixo vou citar um exemplo:

image

Neste exemplo simples criamos uma tabela de usuários, uma tabela de perfil que irá armazenar as regras de acesso, e uma tabela UsuarioxPerfil que vamos relacionar as regras de acesso de cada usuário para o sistema.

Agora precisamos criar nossa código para autenticação. Primeiro criamos algumas procedures de consulta as informações, seguindo nosso exemplo criamos uma procedure exemplo para o retorno des dados do usuário:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        Adriano Bertucci
-- Create date: 02 de janeiro de 2009
-- Description:    Busca Informações para login no sistema
-- =============================================
ALTER PROCEDURE [dbo].[CPBB_Logar]
    @Login as varchar(20),
    @Senha as varchar(50)
AS
BEGIN
    SET NOCOUNT ON;

    --Retorna as Regras(Perfil) caso o usuário e senha sejam válidos
    SELECT P.PerfilId,P.Nome FROM Usuario U
    LEFT JOIN UsuarioxPerfil UP
    ON U.UsuarioId = UP.UsuarioId
    LEFT JOIN  Perfil P
    ON UP.PerfilId = P.PerfilId
    WHERE U.Login = @Login and U.Senha = @Senha

END

Acima temos o código de uma simples procedure que ira retornar as regras de acesso do usuário de acordo com a validação de usuário e senha.

Agora vamos ao código .NET, com nosso projeto ASP.NET criado usaremos os métodos de autenticação do próprio ASP.NET. Como primeiro passo criei um componente de login que o qual colocarei o código de autenticação conforme descrito abaixo:

protected void btnLogar_Click(object sender, ImageClickEventArgs e)
{
    //Busca os controles com o usuário e senha digitados pelo usuário
    string Login = ((TextBox)LoginView.FindControl("txtLogin")).Text;
    string Senha = ((TextBox)LoginView.FindControl("txtSenha")).Text;

    //Executa a função logar a qual dispara a procedure e retorna
    //o perfil de acesso
    string Perfil = CPBB.Servico.Usuario.Logar(Login, Senha);

    //Verifica o retorno do login
    if (!String.IsNullOrEmpty(Perfil))
    {
        #region " === Autenticação === "
        //Inicializamos o processo de autenticação
        FormsAuthentication.Initialize();

        //Criamos um ticket com os dados do usuário
        //reparem que passamos inclusive os perfis carregados
        //o ticket será a base da nossa autenticação
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, Login, DateTime.Now, 
        DateTime.Now.AddMinutes(Convert.ToInt32(ConfigurationManager.AppSettings["CookieTimeOut"])), 
        false, Perfil, FormsAuthentication.FormsCookiePath);

        //Criptografamos o ticket por questão se segurança
        string hash = FormsAuthentication.Encrypt(ticket);
        //Criamos um cookie(será usado para validação do asp.net)
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
        //Setamos a persistencia do cookie
        if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

        //Em fim adicionamos o cookie a nossa aplicação.
        Response.Cookies.Add(cookie);
        //Retornamos para a página que foi solicitada
        string returnUrl = Request.QueryString["ReturnUrl"];
        if (returnUrl == null) returnUrl = "/";
        Response.Redirect(returnUrl);
        #endregion
    }
    else
    {
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Login", "alert('" + 
                                         Resources.MensagensAlertas.LoginInvalido + "');", true);
    }
}

Apenas como demonstração segue abaixo a função de login a qual é utilizada para a consulta ao banco de dados em nosso exemplo representada por CPBB.Servico.Usuario.Logar(Login, Senha);

public static string Logar(string Login, string Senha)
{
    string Perfil = string.Empty;
    //Consultamos o banco de dados para validar o usuário
    SubSonic.StoredProcedure SP = CPBB.DAL.SPs.CpbbLogar(Login, FormsAuthentication.HashPasswordForStoringInConfigFile(Senha,"sha1"));

    System.Data.DataSet ds = SP.GetDataSet();

    CPBB.DAL.PerfilCollection cperfil = new CPBB.DAL.PerfilCollection();
    cperfil.Load(ds.Tables[0]);

    //Carregamos o(s) perfil(s)
    foreach (CPBB.DAL.Perfil perfil in cperfil)
    {
        Perfil += perfil.Nome + ",";
    }

    cperfil = null;
    SP = null;
    ds.Dispose();
    return Perfil;
}

Bom pessoal, feito isso agora temos que configurar nosso Global.asax, ele será o responsável por carregar os perfis do usuário para que o ASP.NET o reconheça. Vamos ao código:

protected void Application_AuthenticateRequest(Object sender,EventArgs e)
{
    //Verificamos a existencia de um usuário na aplicação
    if (HttpContext.Current.User != null)
    {
        //Se o usuário esta autenticado( passou pelo login inicial )
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            //Usando as classes de Identidade do ASP.NET vamos pegar as regras
            // e carregar para a aplicação
            if (HttpContext.Current.User.Identity is FormsIdentity)
            {
                FormsIdentity id =(FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;

                string userData = ticket.UserData;
                string[] roles = userData.Split(',');
                HttpContext.Current.User = new GenericPrincipal(id, roles);
            }
        }
    }
}

Repare que utilizamos o método Application_AuthenticateRequest do Global.asax, ele é usado sempre que um usuário se autentica na aplicação.

Feito isso agora basta usar as configurações no web.Config para setar o acesso as páginas, como por exemplo:

<location path="admin">
  <system.web>
    <authorization>
      <allow roles="Administrador"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

Bom pessoal tentei demonstrar de maneira rápida de fazer uma autenticação via asp.net usando roles, caso tenha alguma dúvida é só avisar!

Bom divertimento!


Bookmark and Share

Lendo E-mails em servidor Exchange – com Visual C# e Interop

Ola Pessoal,

Tivemos um requisito aqui em uma aplicação pontual, na empresa. Precisavamos ler e trabalhar no geral com as mensagens em um servidor Exchange, mas tudo isso através de uma aplicação ASP.NET com C#.

Depois de rápidas discussões decidimos por uma solução bem simples, usar a dll Microsoft.Office.Interop.Outlook . Esta dll faz com que possamos usar os recursos nativos do outlook, ou seja, se seu outlook estiver com sua conta exchange configurada conseguimos usa-lo para efetuar as tarefas como ler um email por exemplo.

Abaixo vou descrever como ficou esta solução rápida:

  1. Com nossa aplicação ASP.NET criado adicionei a referencia da DLL Microsoft.Office.Interop.Outlook ( a versão depende muito da instalação do Office em sua máquina, procure usar a versão que você ira ter no servidor, afinal sem usaremos o proprio outlook para executar as tarefas)
  2. Agora em nossa página podemos usar o seguinte código como exemplo para ler os email da caixa de entrada configurada no outlook local.
    //Criando uma instancia do outlook
    Application outlook = new ApplicationClass();
    
    //Agora vamos nos autenticar
    NameSpace ns = outlook.GetNamespace("Mapi");
    object _missing = Type.Missing;
    ns.Logon(_missing, _missing, false, true);
    
    //Apenas como exemplo vamos selecionar a Inbox para ler seus e-mails
    MAPIFolder inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
    
    //Exemplo de recurso da DLL, abaixo vemos com identificar quantos emails não lidos ainda
    int unread = inbox.UnReadItemCount;
    
    //Agora podemos fazer um loop e ler todos os emails da pasta selecionada
    foreach (MailItem mail in inbox.Items)
    {
        string body = mail.Body;
        string subject = mail.Subject;
    }

Pessoal este é um pequeno exemplo das inúmeras funcionalidades que podemos usar usando o Interop do Office.

[]s


Bookmark and Share

IsPostBack AJAX

Ola Pessoal,

Estes dias várias pessoas me perguntaram como eu verificava em minha aplicação ASP.NET, se a mesma esta disparando um Postback de AJAX. Respondendo a estas perguntas abaixo segue as instruções de como fazer esta verificação.

Primeiro temos que lembrar e saber que apesar da pagina não se “recarregar” por compempleta apenas atualizar a área “isolada” por um Update Panel… ela executa sim um postback em nossa página. Porem ao invés de ser um PostBack tradicional podemos dizer que ele executa um “PostBack de AJAX”.

Para identificar via código este postback também temos diferença:

A verificação de um postback tradicional podemos exemplicar através do código:

if (!IsPostBack)
{
    //Código a executar
}

Já um postback de ajax podemos identificar através do código:

if(ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
{
    //Código a executar
}

Reparem que através da classe ScriptManager consegimos identificar na página corrente um AsyncPostBack que é disparado graças a um chamada AJAX.

[]’s


Bookmark and Share

Treinamentos Microsoft Expression

Ola Pessoal,

 

Voltando aos nossos posts após ao ON THE BEACH IV… Vamos começar como uma grande dica… A Microsoft lançou um site com uma série de treinamentos em Microsoft Expression, trata-se de uma série de vídeos que demonstram entre outras coisas como por exemplo, migrar um site atual para padrões Web Standarts W3C.

Para quem quiser conferir acesse: http://expression.microsoft.com/en-us/cc136535.aspx

[]s


Bookmark and Share