Как исправить эту ошибку Azure: невозможно отключить веб-роль после отключения подключений к удаленному рабочему столу? - PullRequest
1 голос
/ 04 июля 2011

Я борюсь со странной проблемой Azure после отключения подключений к удаленному рабочему столу. Я начал обновление с Azure SDK 1.2 до 1.4 и включил удаленный рабочий стол для упрощения отладки. Однако, как только я закончил обновление и все работало гладко при развертывании, я сделал одно окончательное развертывание с отключенными подключениями к удаленному рабочему столу. К моему удивлению, мои экземпляры веб-ролей застряли в фазе " Ожидание начала роли ". Интересно, что экземпляры рабочих ролей запускались нормально. Примерно через 20 развертываний проблема воспроизводима на 100%:

  • удаленный рабочий стол включен: все отлично работает
  • удаленный рабочий стол отключен: экземпляры веб-ролей не могут запуститься

Включение Intellitrace , похоже, не помогает, поскольку попытка получить журналы приводит к ошибке " Нет журналов IntelliTrace * ". Как и ожидалось, мой инструмент управления исходным кодом показывает, что единственное различие между включением и отключением удаленного рабочего стола заключается в определении службы и файлах конфигурации ( .cscfg, .csdef ). Повторное создание образа и перезапуск виртуальных машин также, похоже, не приносят пользы.

Пожалуйста, если у кого-то была подобная проблема, помогите отчаявшемуся парню!

ОБНОВЛЕНИЕ: Вот определение сервиса и файлы конфигурации:

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="####" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="####.Web" enableNativeCodeExecution="true">
    <Runtime executionContext="elevated" />
    <Startup>
      <Task commandLine="StartupTasks\FixACLs.cmd" executionContext="elevated" />
    </Startup>
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
        </Bindings>
      </Site>
    </Sites>
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="Index" cleanOnRoleRecycle="false" sizeInMB="10240" />
    </LocalResources>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </Endpoints>

    <!-- BEGIN Remote desktop addition -->
    <Imports>
      <Import moduleName="RemoteAccess" />
    </Imports>
    <!-- END Remote desktop addition -->

  </WebRole>
  <WorkerRole name="####.Worker" enableNativeCodeExecution="true">
    <Runtime executionContext="elevated" />
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="Index" cleanOnRoleRecycle="true" sizeInMB="10240" />
    </LocalResources>

    <!-- BEGIN Remote desktop addition -->
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <!-- END Remote desktop addition -->

  </WorkerRole>
</ServiceDefinition>

ServiceConfiguration.cscfg

<?xml version="1.0"?>
<ServiceConfiguration serviceName="####" osFamily="2" osVersion="*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="####.Web">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" value="DefaultEndpointsProtocol=https;AccountName=####;AccountKey=####" />

      <!-- BEGIN Remote desktop addition -->
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="####" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="####" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="####" />
      <!-- END Remote desktop addition -->

    </ConfigurationSettings>

    <!-- BEGIN Remote desktop addition -->
    <Certificates>
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="####" thumbprintAlgorithm="sha1" />
    </Certificates>
    <!-- END Remote desktop addition -->

  </Role>
  <Role name="####.Worker">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" value="DefaultEndpointsProtocol=https;AccountName=####;AccountKey=####" />

      <!-- BEGIN Remote desktop addition -->
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="####" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="####" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="####" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
      <!-- END Remote desktop addition -->

    </ConfigurationSettings>

    <!-- BEGIN Remote desktop addition -->
    <Certificates>
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="####" thumbprintAlgorithm="sha1" />
    </Certificates>
    <!-- END Remote desktop addition -->

  </Role>
</ServiceConfiguration>

1 Ответ

5 голосов
/ 05 июля 2011

Наконец-то нашли виновника благодаря комментариям Стива и smarx :) Спасибо, ребята! Вы заставили меня копать в правильном направлении.

Оказалось, что сценарий PowerShell, который запускала моя задача запуска, использовал Microsoft.WindowsAzure.ServiceRuntime оснастку, которая, как отмечалось smarx , была тихо добавлена ​​с модулем RemoteAccess, когда подключения к удаленному рабочему столу были включены. И это тонкое включение заставило меня упустить из виду зависимость от оснастки и, следовательно, мои дальнейшие головные боли.

Обнаружив проблему, я на самом деле увидел, что мне даже не нужен оснастка, поэтому решение было просто удалить вызов Add-PSSnapin Microsoft.WindowsAzure.ServiceRuntime из моего скрипта PowerShell. В случае, если мне действительно нужен оснастка, эта статья показывает способ установки оснастки перед ее использованием, поскольку она не устанавливается по умолчанию на виртуальных машинах Azure.

Другим полезным ресурсом, который помог мне отладить задачу запуска, была эта статья от smarx .

Надеюсь, это сэкономит кому-то все время, которое я потерял из-за этой проблемы. Еще раз спасибо Стив и Смаркс !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...