У меня есть веб-сайт, размещенный на EC2 с использованием IIS 8.5. У меня есть виртуальный каталог с включенной загрузкой BITS, и все работает через http, а теперь и через https, когда мой URL указывает на общедоступный EIP экземпляра.
Дизайн требует использования эластичного балансировщика нагрузки во фронтальном (-ых) экземпляре (-ах). Хитрость в том, что когда я подключаю ELB, я начинаю получать 500 ошибок для сеансов BITS. Мы определили, что, когда мы не используем ELB, задания выполняются правильно.
Конкретные ошибки BITS, которые мы видели в журналах IIS, назывались «Недействительный индекс». внутри ошибки HTTP 500. Видеть этот вопрос об отслеживании кодов ошибок BITS.
У нас есть гипотеза, что, поскольку BITS использует расширенные HTTP-глаголы (например, BITS_POST
), что, возможно, некоторые из волшебства ELB искажали наши заголовки. Прежде чем я попытаюсь настроить WireShark, чтобы копать глубже, я хотел проверить, сталкивался ли кто-нибудь еще с этой проблемой.
Несмотря на то, что AWS утверждает, что ELB поддерживает все HTTP-команды по состоянию на конец 2013 года, я столкнулся с той же проблемой, и мне пришлось использовать пересылку TCP, чтобы загрузки BITS работали через ELB.
Подробности: У меня есть две виртуальные машины Server 2012 R2, одна в кластере vSphere 5.5 в colo (VM1), другая в AWS (VM2), обе полностью исправлены по состоянию на 01.06.2016. VM1 использует PowerShell (Start-BitsTransfer -TransferType Upload) для отправки файлов на VM2 (работает IIS 8.5 с привязками HTTP и HTTPS, последняя использует сертификат, выданный CA).
Пункт 3 - это то, что я (и, кажется, вы) хотел, но вариант 4 - это то, что я выбрал, и он работает.
Детали ошибки для потомков (/ 50 человек в год, которые сталкиваются с этим вопросом): При исследовании варианта 3 VM1 выдает следующую ошибку:
PS C:\> $error[0] | Select-Object *
writeErrorStream : True
PSMessageDetails :
Exception : System.Exception: Invalid index.
TargetObject :
CategoryInfo : InvalidOperation: (:) [Start-BitsTransfer], Exception
FullyQualifiedErrorId : StartBitsTransferCOMException,Microsoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {0, 1}
Журналы IIS VM2 показывают следующее:
#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2016-06-03 01:08:56
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2016-06-03 01:20:52 xxx.xx.x.xx BITS_POST /upload/file.dat (bits_error:,500,0x80070585) 8080 - xxx.xx.x.xxx Microsoft+BITS/7.7 - 500 0 0 0
Как вы отметили, 0x80070585 соответствует исключению Invalid index, и, как вы отметили на еще один вопрос о переполнении стека, Отслеживание неудачных запросов показывает, что исключение происходит в bitssrv.dll, но я не смог определить в журналах ничего, что могло бы привести к действию.