Usando um velho truque dos grupos de discussão do Joel de desligar o keep-alive, e em seguida, executar o WLBS drainstop foi a chave para fazer isso funcionar corretamente. Então eu escrevi um script na VBS para automatizar a coisa toda. Existem 2 scripts. Um script para remover o nó do cluster e outro para colocar o nó novamente online.
O Script Remover é o seguinte.
Set IISOBJ = getObject("IIS://LocalHost/W3SVC")
Dim IISInstance
Dim FoundIIS
Dim IISInstanceName
Dim NumConnections
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
IISInstanceName = "Default Web Site"
FoundIIS = False
For each IISInstance in IISOBJ
If (IISInstance.Class = "IIsWebServer") Then
If (IISInstance.ServerComment = IISInstanceName) Then
IISInstance.Put "AllowKeepAlive", False
IISInstance.SetInfo()
FoundIIS = True
Exit For
End If
End If
Next
If Not FoundIIS Then
WScript.Echo "Could Not Find IIS. Exiting."
Wscript.quit()
End If
WSHShell.Run "wlbs drainstop" , 0, true
WScript.Echo " Going To Sleep For: " & IISInstance.Get("ConnectionTimeout") & " Seconds"
WScript.Sleep IISInstance.Get("ConnectionTimeout") * 1000
WSHShell.Run "wlbs stop" , 0, true
WScript.Echo "Successfully removed node from load balancing"
E o script para colocar a máquina novamente on-line é o seguinte.
Set IISOBJ = getObject("IIS://LocalHost/W3SVC")
Dim IISInstance
Dim FoundIIS
Dim IISInstanceName
IISInstanceName = "Default Web Site"
FoundIIS = False
For each IISInstance in IISOBJ
If (IISInstance.Class = "IIsWebServer") Then
If (IISInstance.ServerComment = IISInstanceName) Then
IISInstance.Put "AllowKeepAlive", True
IISInstance.SetInfo()
FoundIIS = True
Exit For
End If
End If
Next
If Not FoundIIS Then
WScript.Echo "Could Not Find IIS. Exiting."
Wscript.quit()
End If
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "wlbs start" , 0, true
WScript.Echo "Successfully added node to load balancing"
Você pode alterar a variável IISInstanceName na parte superior do script para corresponder ao nome do seu servidor da web. Este é o nome que aparece quando você vai para a seção "Serviços de Informações da Internet" em "Ferramentas Administrativas". Você pode mudar isso para o que você nomeou seu servidor web. No geral é um pouco desajeitado, mas funciona. Também é possível alterar a primeira linha para
Set IISInstance = getObject("IIS://LocalHost/W3SVC/1")
e, em seguida, recorte o loop inteiro que procura o servidor pelo nome, mas acho que é um pouco mais "correto" encontrar o servidor pelo nome, em vez de por algum número, que não tenho certeza se o windows mudaria em algumas circunstâncias de adição e remoção de instâncias do servidor da web.