Рабочая роль Azure работает на osFamily="2" (Server 2008R2), но не работает на osFamily="3" (Server 2012)
У нас есть рабочая роль Azure - .NET 4.0, которая отлично работает при развертывании в Azure на osFamily="2" (Server 2008R2). Однако, когда мы внедряем с osFamily="3" (Server 2012) и никаких других изменений кода, рабочая роль постоянно перезагружается со следующими 2 ошибками в журналах событий сервера:
Неправильное имя приложения: WaWorkerHost.exe, версия: 6.0.6002.18488, отметка времени: 0x505cf7ca. Неправильное имя модуля: KERNELBASE.dll, версия: 6.2.9200.16384, отметка времени: 0x5010ab2d Код исключения: 0xe0434352 Смещение ошибки: 0x0000000000010189cc Неисправность процесса Faulting: 0 время запуска приложения: 0x01cdd4318f76d221 Неправильный путь к приложению: E:\base\x64\WaWorkerHost.exe Неправильный путь к модулю: D:\Windows\system32\KERNELBASE.dll Идентификатор отчета: cf1810b0-4024-11e2-93ec-00155d4250e3 Полное имя ошибочного пакета: Неправильный пакетный идентификатор приложения:
Приложение: WaWorkerHost.exe Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Сведения об исключении: стек System.InvalidOperationException: в Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__0() в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.Context).) в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback.Object) в System.Threading.ThreadHelper.ThreadStart()
Есть идеи?
ОБНОВЛЕНИЕ ------------------ Найдено 3-е исключение:
Приложение: WaWorkerHost.exe Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Информация об исключении: System.Security.Cryptography.CryptographicException Стек: в Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__0() в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContingContext).Object, Boolean) в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) в System.Threading.ThreadHelper.ThreadStart()
Мы используем сертификат в LocalComputer/My для расшифровки строк подключения. Сертификат успешно развернут в OsFamily="2" (Server 2008R2), и пользователь рабочей роли добавлен в закрытый ключ (проверено в сеансе RDP). Тем не менее, для OsFamily="3" (Server 2012) - сертификат не развертывается, следовательно, ошибка шифрования. В продолжение поддержки Azure...UGH.
1 ответ
От инженеров службы поддержки Azure:
После более глубокого изучения я обнаружил разницу: в ОС семейства 2 WaWorkerHost работает под временной учетной записью (с именем GUID), созданной в процессе инициализации роли, эта учетная запись имеет разрешение на доступ к закрытому ключу сертификата; В ОС Family 3 WaWorkerHost работает под учетной записью "NETWORK SERVICE", у этой учетной записи нет разрешения на доступ к закрытому ключу.
Я связываюсь с производственной группой, мы исследуем эту проблему глубже. Я буду держать вас в курсе.