Я не очень знаком с PowerShell, но из моего опыта работы с оболочками вы конвейерно выполняете команды. Каждый набор перед символом канала (|) представляет отдельную команду, которая передаст свой результат следующей команде в канал (команда после символа канала). И поскольку вы выполняете эти команды до того, как деполяция будет полностью завершена, вы развертываете только что развернутое приложение в рабочий слот.
Первое, на что следует обратить внимание, это то, что у вас есть аргумент "-WaitToComplete" только для последней команды, которая фактически является Get-OperationStatus.
Другая вещь, которую я вижу, это то, что эти команды powershell просто выполняют своп vip. Как насчет развертывания?
Из того, что вы описали, видно, что ваш сервер сборки автоматически развертывается для подготовки, и у вас есть событие после сборки, которое выполняет скрипт подкачки. То, что Майк Эриксон предлагает здесь, имело бы смысл, если бы ваш поток был таким - немедленно поменяйте местами после деполоя к постановке. Зачем вам переходить в промежуточный режим, если вы собираетесь произвести обмен без предварительной проверки работоспособности приложения? Однако я бы не рекомендовал прямую деполяцию на сервер (удаление + развертывание), а обновление службы. Потому что когда мы выполняем обновление службы, наше развертывание сохраняет свой публичный IP-адрес. Если мы удалим + deploy, мы получим новый публичный IP-адрес. И общедоступный IP-адрес размещенной службы уже гарантированно не изменится, пока развертывание не будет удалено.
Наконец, вы должны немного расширить свой скрипт PowerShell. Сначала включите подпрограмму, которая проверит (и подождет) промежуточный слот на «готовность», а затем выполнит обмен. Как я уже сказал, мне не очень нравится PowerShell, но я уверен, что это возможно.
Только мои 2 цента.
UPDATE
После повторного ознакомления с этим руководством я теперь кое-что понимаю. Вы ожидаете завершения операции, но это операция VIP-SWAP, которую вы ожидаете завершить. Если ваше заявленное развертывание еще не готово, вы должны подождать, пока оно не станет готовым. А также, как упоминал Майк, может быть задержка DNS, которая отмечена в конце guide :
Примечание:
Если вы посетите производственную площадку вскоре после ее продвижения, DNS
имя может быть не готово. Если вы столкнулись с ошибкой DNS (404), подождите
несколько минут и попробуйте еще раз. Имейте в виду, что Windows Azure создает DNS
Назовите записи динамически и что изменения могут занять несколько минут
размножаться.
ОБНОВЛЕНИЕ 2
Ну, вам придется запросить все роли и все их экземпляры и подождать, пока все они будут готовы. Технически, вы можете провести VIP-своп, по крайней мере, один экземпляр для каждой роли готов, но я думаю, что это еще больше усложнит сценарий.