Como configurar o IIS 7.5 sem reiniciar + chamar um arquivo em lote em cada reinicialização do ASP.NET

3

Consulta 1 - É possível alterar "Restrições de endereço IP e de domínio" no IIS 7.5 sem reiniciar o IIS? Consulta 2 - Como invocar algum arquivo em lote (ou executável) toda vez que um processo de trabalho do ASP.NET for reiniciado?

Temos um site ASP.NET MVC que estamos hospedando em um servidor IIS 7.5. Precisamos aquecer o site percorrendo muitas das páginas e funcionalidades do site.

A ideia é implementar algo como abaixo:

  • Em todos os reinícios do processo de trabalho do ASP.NET ou do IIS, execute um arquivo de lote (ou executável).
  • No arquivo de lote, configure a funcionalidade "Restrições de domínio e endereço IP" do IIS para atender às solicitações de localhost ou 127.0.0.1 apenas. Negar solicitações de todos os outros clientes.
  • Em seguida, no arquivo em lote, ative as solicitações HTTP para executar as funcionalidades de login, navegação, pesquisa, adicionar edição etc. para realizar o aquecimento real.
  • Após o término do aquecimento, configure a funcionalidade "Restrições de domínio e endereço IP" do IIS para atender às solicitações de todos os clientes. Certifique-se de que essa alteração não acione uma redefinição do IIS.

PS: Por favor, note que o módulo de aquecimento do IIS que costumava estar disponível no link foi removido desde algum tempo.

PS: consulte link para consulta focada no desenvolvedor.

Atualização 1: O código a seguir foi criado usando o IIS de acordo com a resposta de Scott. Infelizmente, chamar esses métodos reinicia o processo de trabalho do ASP.NET. Como parar isso? BTW, não estou postando código para a rotina FindElement (), como parece genérico na natureza.

    internal static void AllowOnlyLocalUsers()
    {
        using (ServerManager serverManager = new ServerManager())
        {
            Configuration config = serverManager.GetApplicationHostConfiguration();

            ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "MyApplication");
            ipSecuritySection["allowUnlisted"] = false;

            ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();

            ConfigurationElement addElement = ipSecurityCollection.CreateElement("add");
            addElement["ipAddress"] = @"127.0.0.1";
            addElement["allowed"] = true;
            ipSecurityCollection.Add(addElement);

            serverManager.CommitChanges();
        }
    }

    internal static void AllowAllUsers()
    {
        using (ServerManager serverManager = new ServerManager())
        {
            Configuration config = serverManager.GetApplicationHostConfiguration();

            ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "MyApplication");
            ipSecuritySection["allowUnlisted"] = true;

            ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();

            ConfigurationElement addElement = FindElement(ipSecurityCollection, "add", "ipAddress", @"127.0.0.1", "subnetMask", @"255.255.255.255", "domainName", @"");
            if (addElement != null)
            {
                ipSecurityCollection.Remove(addElement);
            }

            serverManager.CommitChanges();
        }
    }
    
por Dhwanil Shah 12.09.2011 / 15:41

2 respostas

2

Você pode definir restrições de IP em applicationHost.config em uma tag de local para seu site. Se você fizer isso, não causará uma reciclagem de appdomain. A regravação de URL no nível global é outra opção.

Semana 12 e semana 18 da minha série de vídeos abordam AppDomains e edição apphost.config.

Para fazer o script, use appcmd. A melhor maneira de fazer isso é começar com o Editor de Configuração no IIS, fazer a alteração desejada e, em seguida, "Gerar Script" no painel de ações à direita. O comando appcmd estará lá.

Quanto à segunda questão, você precisará entender a inicialização de seu aplicativo em seu projeto e ativar esse evento. Uma chamada assíncrona permitirá iniciar o script de inicialização enquanto permite que a página continue, caso contrário, você terá um problema de bloqueio.

    
por 15.09.2011 / 16:07
0

A Microsoft lançou um módulo que faz exatamente o que você pede. O Módulo de inicialização de aplicativos para o IIS 7.5 melhora a capacidade de resposta de sites da Web ao carregar os aplicativos da Web antes da primeira solicitação chega.

Enquanto o aplicativo está iniciando, o módulo redirecionará todo o tráfego para uma página html que você fornecer. Então você não tem que mexer com as restrições de IP.

Você pode especificar uma série de URLs que o IIS pré-carregará antes de aceitar solicitações de usuários reais. Eu não acho que você pode obter um verdadeiro login de usuário expereince, mas talvez você possa configurar páginas simuladas que não exigem login que preencha o mesmo aquecimento que você pede?

O recurso que acho mais atraente é que esse módulo também permite a reciclagem de processos sobrepostos. O tutorial a seguir do IIS 8.0 incluir uma abordagem passo a passo sobre como ativar a reciclagem de processos sobrepostos.

Quando o IIS detecta que um processo de trabalho ativo está sendo reciclado, o IIS não alterna o tráfego ativo para o novo processo de trabalho reciclado até que o novo processo de trabalho conclua a execução de todos os URLs de inicialização do aplicativo no novo processo. Isso garante que os clientes que navegam em seu website não visualizem as páginas de inicialização do aplicativo quando o aplicativo estiver em funcionamento e funcionando.

Este módulo de inicialização de aplicativos do IIS está embutido no IIS 8.0, mas está disponível para download no IIS 7.5 .

    
por 03.10.2012 / 21:14