Categorias
dicas erros web.config

Erros mais frequentes no ASP.NET

Para quem est?? come??ando a desenvolver com ASP.NET e se depara com a tela amarela, j?? deve ficar horrorizado com a linguagem. Diferente das linguagens ultrapassadas, essa tela ?? muito ??til para desvendar os problemas e, posteriormente, corrig??-los.

As telas de erro do ASP.NET mais comuns s??o aquelas nas quais s??o exibidas direto o erro para o usu??rio. Lembrando que j?? vimos em um post que isso demonstra vulnerabilidade do sistema mas que, a n??vel de homologa????o, ?? utiliz??vel para identificar os problemas, an??lise da pilha e comportamento do mesmo.

N??o vou explicar tudo sobre erros no ASP.NET sen??o ter??amos um grande post de tudo o que ocasiona erros, mas para auxiliar os iniciantes, a Locaweb disponibilizou um t??pico nas quais explica os erros mais comuns de programa????o bem como corrig??-los. D??em uma lida para conferir… Veja aqui!

Categorias
ajax componentes dicas javascript

Utilizando mensagem de confirma????o e executando c??digo de acordo com o que foi clicado na mesma p??gina

N??o sei se o t??tulo ficou claro com o que eu queria dizer, mas vejamos a seguinte situa????o:

“Quero colocar uma mensagem de confirma????o via code-behind onde ir?? ser emitida para o usu??rio e a depender do que ele escolher ir?? ser processado um certo trecho de c??digo ou outro. Tipo o confirm do JavaScript, s?? que ?? executado pelo ASP.NET.”

No Code Project tem v??rias formas de implementa????o e umas delas me chamou a aten????o: o de Yavuz Kucukpetek. Usando AJAX ?? poss??vel transformar um Panel nessa janela flutuante usando o ModalPopupExtender. Dei uma simplificada no c??digo dele (j?? informei que n??o fiz, apenas ajustei) e voc?? podem baixar o controle modificado aqui.

Depois que baixarem o controle, adicione no seu projeto. Vamos l??! Na p??gina que deseja utilizar o controle, registre-o e coloque-o da seguinte forma:

<%@ Register Src=”~/inc_ConfirmMessage.ascx” TagName=”ConfirmacaoBox” TagPrefix=”Thiago” %>


<Thiago:ConfirmacaoBox ID=”ConfirmacaoBox” runat=”server”></Thiago:ConfirmacaoBox>

No code-behind dever?? ficar o seguinte:

    protected void Page_Load(object sender, EventArgs e)
    {
        ConfirmacaoBox.MsgBoxAnswered += Mensagem_Resposta;
    }

    public void Mensagem_Resposta(object sender, inc_ConfirmMessage.MsgBoxEventArgs e)
    {
        if (e.Answer == inc_ConfirmMessage.enmAnswer.OK)
        {
            // Se clicou em OK processa o que deseja
        }
        else
        {
            // Sen??o processa outra coisa
        }
    }

    protected void ExecutaProcesso_Click(object sender, EventArgs e)
    {
        ConfirmacaoBox.AddMessage(“Deseja continuar o c??lculo do processo na mesma p??gina?”, inc_ConfirmMessage.enmMessageType.Attention, true, true, “”);
    }

Pronto! Apenas isso… Vamos ??s explica????es. No Page_Load precisamos informar o m??todo que ir?? gerenciar as decis??es do usu??rio, por isso informamos o Mensagem_Resposta. Dentro dele ir?? conter os processos que ir??o ser executados a depender da escolha. O ExecutaProcesso_Click ?? o m??todo executado quando clicamos no bot??o que ir?? disparar a pergunta.

“Ah Thiago, mas a?? ?? s?? apenas uma confirma????o. E se eu quiser v??rias intera????es?”

Simples, basta adicionar outra Caixa de Confirma????o para a segunda etapa de decis??es chamando-a dentro do processo de decis??o da primeira e assim por diante.

Categorias
acesso simult??neo application deadlock dicas

Bloqueando apenas um acesso por vez em uma vari??vel de aplica????o

Toda aplica????o web que trabalhamos raramente pensamos na quantidade de acessos que s??o realizados simultaneamente em um determinado trecho de c??digo. Um exemplo cl??ssico ?? uma vari??vel de contador de acessos/visitantes. Armazenamos o valor inicialmente em uma vari??vel de aplica????o. Depois quando um usu??rio acessa, ?? incrementado em 1. S?? que se ao mesmo tempo acessar dois ou mais usu??rios, eles podem capturar o mesmo valor ou valor defasado e colocar a contagem errada. Veja o exemplo abaixo:

Quando tivemos o acesso simult??neoparalelo, o valor capturado da vari??vel da aplica????o foi colhido pelos dois usu??rios e o valor armazenado foi comprometido. Para isso devemos bloquear o acesso ?? vari??vel de aplica????o e permitir apenas um usu??rio por vez executar a soma. Nesse caso, pode-se utilizar o seguinte trecho:

        try
        {
            Application.Lock();
            lock (this)
            {
                // Trecho a ser executado que altera uma vari??vel de aplica????o ou bloco cr??tico
            }
            Application.UnLock();
        }
        catch
        {
            Application.UnLock();
        }

O Application.Lock() ir?? bloquear o acesso de outros usu??rios ??s vari??veis de aplica????o e depois o Application.UnLock() libera. O lock (this) permitir?? apenas o acesso de um ??nico usu??rio por vez no trecho de c??digo cr??tico. A combina????o dos dois m??todos depende muito do que estiver fazendo. Cada caso tem seu respectivo uso. O simples uso do lock (this) pode resolver… Ele ?? muito usado para evitar deadlocks. No mais, s?? isso. Recomendo dar uma lida posteriormente nos artigos abaixo:

Categorias
desempenho dicas dll iis

Diferen??as entre Aplica????es Compiladas e N??o-Compiladas

Quando program??vamos (ou programamos) com aquelas linguagens do tipo PHP ou ASP Cl??ssico apenas peg??vamos o que foi implementado e jog??vamos no servidor web para uso. Com a inova????o das tecnologias e tipos de linguagens (compiladas, interpretadas, h??bridas) algumas d??vidas nos cercam quando estamos publicando um certo projeto. Nesse caso, falemos do ASP.NET para as vers??es acima da 2.0.

Antes de mais nada, o ASP.NET ?? compilado. Mesmo que voc?? jogue os fontes no IIS ele ?? compilado na primeira vez que ?? acessado (e/ou alterado). Voc?? n??o v??, mas por tr??s ?? feito isso. Para quem nunca compilou uma aplica????o web, h?? diversas formas para uma dada finalidade. Geralmente ?? usada a fun????o Publish Web Site (compila e publica).

Mas o que muitos perguntam ??: existe diferen??a de desempenho? N??o! Muitos dizem que h?? um pouco, mas j?? trabalhei com v??rias aplica????es e n??o notei qualquer diferen??a. Li v??rios artigos por a?? na net e n??o achei qualquer um que demonstrasse e/ou notasse diferen??a brusca de desempenho. Ent??o, elaborei a seguinte tabelinha abaixo com um pequeno resumo. Se tiver mais, favor avisar-me que atualizo:

Compilada
N??o-Compilada
 Desempenho
 Normal
Normal
 C??digo-fonte
 Protegido em DLL’s
Vis??vel 
 HTML
 Sem mudan??a
Sem mudan??a 
 Atualiza????oCorre????o
 Precisa compilar todo o projeto e public??-lo (c??digo-fonte) enquanto no design pode alterar normalmente
Pode alterar diretamente no problema (p??gina)
 Primeiro Acesso
 Normal
Lento 

??bvio que toda regra tem sua exce????o, ent??o a depender dos casos supra-citados pode haver pequenos detalhes que mudam uma coisinha ou outra mas nada de t??o dr??stico (de acordo com a tabela – exemplo, na compila????o FULL voc?? n??o altera sequer o HTML). Se quiserem conhecer mais sobre os tipos de compila????o (Full, Pr?? ou Sob-Demanda) visite os links da MSDN e de Dennes Torres.