O que você está propondo soa como uma troca A / B. ( Pergunta semelhante )
Existe uma ferramenta addin do IIS da Microsoft chamada Web Deploy . Ele automatizará a maioria dos movimentos físicos de implantação de código atualizado no IIS, mas sua necessidade de migração contínua é o ponto de fixação, pois você tem transações de arquivos de longa duração. A melhor maneira de lidar com isso é obter um balanceador de carga, executar duas instâncias de produção do seu site ao mesmo tempo e ter uma terceira instância para atualizações de teste.
(BTW, o Azure está fazendo algo assim com o "Cloud Services" - há um comando "Swap" para fazer exatamente isso).
Voltando à sua configuração específica, considere esta configuração:
Uma máquina do IIS, dois sites. Web Site A e Web Site B. Eles não apontam para os mesmos arquivos. Eles têm suas próprias pastas. O site A está on-line e atende a usuários em produção, enquanto o Site B está off-line. Quando você estiver pronto para atualizar, você atualiza o Site B, depois troca On / Off Web Site A. Agora B está online e A está offline. Esta é uma rotação A / B. Mais tarde, quando você fizer sua próxima atualização, atualize A e, em seguida, ative / desative com B. Agora, A está on-line e B está off-line.
Nesse exato momento, quando você troca, existe a possibilidade de perder tráfego - (e você provavelmente vai matar essas transferências de arquivos), mas se o seu aplicativo estiver com volume baixo, talvez ninguém perceba (você decide). No entanto, se isso for de missão crítica, alto volume, site - obtenha um balanceador de carga e use-o como os outros descreveram.
O que o WebDeploy não fará, (até onde eu sei) é o site A e o site B de troca / desativação. Para isso, você precisará escreva um script e faça isso na linha de comando .
O benefício dos scripts do Web Deploy + é que você pode eventualmente automatizar isso e talvez vinculá-lo a um sistema de implantação contínua.
As transferências de arquivos de longa duração são provavelmente impossíveis de salvar com essa configuração. Outro desafio é qualquer estado de memória do seu aplicativo. Se o seu aplicativo da Web foi criado com dados na memória, você o perderá quando fizer a troca A / B. Se os programadores estiverem usando a sessão, você poderá ativar o serviço da sessão. Os dados da sessão não estarão no mesmo processo com o restante do aplicativo e poderão sobreviver à troca A / B. Converse com seus programadores sobre como o aplicativo gerencia dados na memória. Talvez não tenha realmente nenhum. Talvez ele possa ser facilmente recriado assim que o aplicativo for recarregado - (por exemplo, reconstruindo um cache do banco de dados)