Por que o script com appcmd se comporta de maneira diferente de usar a GUI do IIS?

2

Eu cocei a minha cabeça nisso. Por favor, ajude-me a parar de arranhar.

Temos uma solução manual para um problema de site que estamos enfrentando. A solução alternativa sempre funciona quando executamos as etapas manualmente, mas a execução de um script que executa as mesmas etapas às vezes funciona, mas geralmente não funciona. Minha pergunta: Por que haveria uma diferença entre executar as etapas manualmente e executá-las sob o script?

As etapas manuais são:

  1. Pare o site
    • no Gerenciador do IIS, selecione o site, clique em Parar
  2. Recicle o pool de aplicativos no qual o serviço de back-end é executado
    • no Gerenciador do IIS, selecione o pool de aplicativos, clique em Reciclar
  3. Faça uma chamada para um método no serviço de back-end. Isso é pré-preencher alguns dados antes de colocar o site em funcionamento. O serviço de back-end é um .asmx
    • No Internet Explorer, navegue até o método de back-end Invocar página, insira alguns parâmetros, clique em "Invocar"
  4. Iniciar o site
    • no Gerenciador do IIS, selecione o site e clique em Iniciar

Como eu disse, isso sempre traz o site com funcionalidade completa. Isso deve ser roteirizado, certo?

Então eu escrevo um script em lote que basicamente faz isso:

%windir%\system32\inetsrv\appcmd.exe stop site nameOfSite
%windir%\system32\inetsrv\appcmd.exe recycle apppool nameOfAppPool
curl...(call web method with headers and parameters identical to what IE does)
%windir%\system32\inetsrv\appcmd.exe start site nameOfSite

A chamada curl parece idêntica no Fiddler ao uso do IE para fazer a chamada. Além disso, substituí a chamada curl por uma pausa, para que o script me dê a chance de usar o IE para chamar o método da web. Então, tenho certeza que não é essa linha.

Eu coloquei atrasos entre as etapas.

Eu tentei iniciar / parar o appPool (em vez de reciclar).

Eu tentei fazer a mesma coisa com o Python:
subprocess.check_output([params to call appcmd], shell=True)

Nenhuma dessas tentativas altera o comportamento:

  • cada etapa informa o sucesso
  • às vezes o site está realmente pronto e está tudo bem
  • com mais frequência, o site volta a cair depois de um minuto. Isso NUNCA acontece se eu executar as etapas no IIS e no IE.
  • ocasionalmente, a etapa final não é bem-sucedida e o site permanece inativo.

Quando o script falha, simplesmente executar novamente o script nunca funciona. Eu tenho que executar as etapas manualmente, então tudo está bem.

Isso não faz sentido para mim. Faz para você? Existe uma alternativa para appcmd que mais se aproxima do que o IIS faz ao iniciar / parar / reciclar? O que estou fazendo errado?

    
por biscuit314 10.05.2015 / 20:55

1 resposta

0

Quais são as permissões para a conta de usuário que está executando o script.

Suponho que você seja um administrador, mas a conta de tempo de execução do script também é uma conta de nível de administrador?

Verifique se ....

    
por 20.05.2015 / 23:06