Categorias
application diret??rio virtual dll iis site windows

Convertendo uma pasta em aplica????o no IIS via c??digo (C#)

Somente pelo IIS ?? poss??vel converter uma pasta em aplica????o? Mais ou menos. Na vers??o 7 do IIS j?? disp??e de m??dulos que simplificam o processo de cria????o de site, diret??rio virtual, pools de aplica????o e as aplica????es em si. Nesse artigo mostrarei bem r??pido como converter uma pasta em uma aplica????o.

Crie sua aplica????o e adicione, como refer??ncia, o bin??rio Microsoft.Web.Administration.dll que fica na pasta C:WindowsSystem32inetsrv . Agora adicione o seguinte c??digo:

using Microsoft.Web.Administration;

private void CriaEntradaIIS(string diretorio)
    {
        try
        {
            // Cria a pasta do site
            if (!Directory.Exists(diretorio))
                Directory.CreateDirectory(diretorio);


            // Servidor de Aplica????o
            ServerManager sm = new ServerManager();


            // Captura o site raiz onde ir?? adicionar a aplica????o
            Site st = sm.Sites[“Default Web Site”];


            // Cria a aplica????o no diret??rio criado apontando o caminho, ex: aplicacao
            Application app = st.Applications.Add(“/aplicacao”, diretorio);
            app.ApplicationPoolName = “ASP.NET v4.0”;
            sm.CommitChanges();


            // Libera
            sm.Dispose();
        }
        catch (Exception erro)
        {
            return;
        }
    }

Se tentar executar dar?? erro… Antes d?? permiss??o total ao grupo Servi??o de Rede (Network Service) ?? pasta C:WindowsSystem32inetsrvconfig . Agora sim ir?? criar. Para mais exemplos veja nesse post aqui.

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: