Подтвердить что ты не робот

Как управлять AppPool, используемым для развертывания через настройки VS и MSDeploy

Когда я создаю пакет развертывания для моего webapp, пакет содержит файл archive.xml, который содержит следующее:

<createApp
    applicationPool=""
    MSDeploy.applicationPool="1"
    appExists="True"
    MSDeploy.appExists="1"
    ... />

Вопрос:

Как я могу управлять пулом приложений, в который устанавливается webapp, и, в некоторых случаях, создавать новый пул приложений? Существуют ли параметры VS, которые я могу изменить, чтобы управлять указанным выше выходом или иным образом влиять на то, как пул приложений во время развертывания?

Что я нашел до сих пор:

1. Параметр MSBuild

В соответствии с одним сообщением SO я могу сообщить msbuild использовать пул приложений, добавив следующий параметр, но я не мог видеть никакой разницы в сгенерированном выходе:

/p:IncludeAppPool=true

2. Настройка параметров .xml файла

Другое сообщение о настройке пула приложений для msdeploy, кажется, подразумевает, что я могу изменить сгенерированный файл parameters.xml, чтобы я мог указать имя пула приложений как аргумент msdeploy. Этот файл существует в пакете zip, поэтому его будет непросто настроить. Если я поменю его на архив, тогда файл станет более доступным.

3. Изменение настроек VS

Как развернуть страницу webapp, похоже, мне нужно будет переключиться с IIS Express на IIS, а затем включить некоторые флажки. На странице свойств проекта флажок Include application pool settings used by this Web project отключен, независимо от установки флажка "Включить параметры IIS, настроенные в IIS Express" (который я сейчас не отмечен). Я попробую переключиться на полный IIS и посмотрю, поможет ли это мне лучше.

4. Создайте пул приложений с помощью cscript

Похоже, что я могу создать пул приложений с помощью отдельного инструмента, но я не уверен, что это только TFS. Это инструмент, который я раньше не видел, но он может быть удобным инструментом.

5. У MSDeploy есть поставщик appPoolConfig

MSDeploy поставщик appPoolConfig выглядит многообещающим, поскольку я мог бы вручную настроить пул приложений, а затем использовать его как источник синхронизации, но, по крайней мере, это только ручной раз.

4b9b3361

Ответ 1

Я также начинаю изучать возможности того, как это сделать.

У меня еще есть какое-то исследование, но я могу дать вам следующие указатели:

  • IncludeAppPool = true включает приложение AppPoolExtension, которое также копирует пул приложений при синхронизации веб-сайта из одного места в другое. Я думаю, это не будет иметь эффекта при создании пакета. Если, может быть, если вы используете WAP через локальный IIS, и вы включаете параметры IIS в свой пакет.

  • Parameters.xml действительно существует в zip. Но если вы поместите файл Parameters.xml в корень вашего WAP, вы можете указать свои собственные параметры, которые будут объединены с одним VS, созданным при упаковке.

  • Вы действительно можете проверить "Включить настройки пула приложений, используемые этим веб-проектом" (на самом деле: это устанавливает свойство msbuild IncludeAppPool равным true). Затем манифест будет содержать запись для создания приложения. Однако это возможно только в том случае, если вы создаете пакет с машины, которая также локально запускает WAP. Это не вариант при работе с сервером сборки, который является моим случаем

  • Можно было бы сделать пакетный пакет script для запуска msdeploy из командной строки и использовать поставщик AppPool для создания приложения. Хотя это кажется немного неуклюжим для меня, поскольку я хотел бы включить создание приложения в манифест моего сгенерированного пакета VS (или сборки)

  • Я сейчас исследую, можно ли вставить apppoolconfig в свой манифест, используя файл wpp.targets(подробнее здесь и здесь

Я могу вернуться к вам, если найду, как это сделать.

Edit:

Я выяснил, что вы не можете упаковать создание нового пула приложений с помощью поставщика appPoolConfig. Я был вынужден написать собственный провайдер. Я сделал это на основе некоторых (очень простых) примеров, которые я нашел, и путем обратного проектирования некоторых из существующих поставщиков. В основном я создал класс-оболочку, который вызывает c:\windows\system32\inetsrv\appcmd и раскрыл эту функцию как поставщик MSDeploy. appcmd - это инструмент командной строки для настройки iis, с ним вы можете создавать приложения... Если кому-то интересно, я мог бы поделиться некоторыми из кода...

Привет, другое редактирование

Мне жаль, что это заняло у меня столько времени, но я поместил часть своего кода в свой собственный AppPoolConfigProvider на своем skydrive, вы можете получить к нему доступ здесь Или здесь - это репозиторий gist для доступа к нему.

Чтобы использовать этого провайдера, следует поместить вашу скомпилированную dll в папку расширения (вы должны создать ее самостоятельно в разделе "c:\Program Files (x86)\IIS\Microsoft Web Deploy V2 \" ). Вы можете найти дополнительную информацию об этом в Интернете.

Я использую поставщика в моем файле xxx.wpp.targets следующим образом:

<Target Name="AddConfigAppPool" Condition="'$(RunConfigAppPool)'">
<Message Text="Adding configAppPool provider" />
<ItemGroup>
  <MsDeploySourceManifest Include="configAppPool">
    <path>@(__DefaultDeployEnvironmentSetting->'%(AppPoolName)')</path><!-- Represents the name of the AppPool, required-->
    <managedRuntimeVersion>$(DeployManagedRuntimeVersion)</managedRuntimeVersion>
    <managedPipelineMode>$(DeployManagedPipelineMode)</managedPipelineMode>
    <processModel_identityType>@(__DefaultDeployEnvironmentSetting->'%(AppPoolIdentyType)')</processModel_identityType>
    <processModel_userName>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserName)')</processModel_userName>
    <processModel_password>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserPassword)')</processModel_password>
    <processModel_idleTimeout>00:00:00</processModel_idleTimeout>
    <AdditionalProviderSettings>managedRuntimeVersion;managedPipelineMode;processModel_identityType;processModel_userName;processModel_password;processModel_idleTimeout</AdditionalProviderSettings>
    <!--Possible additional provider settings: queueLength,autoStart,enable32BitAppOnWin64,managedRuntimeVersion,managedRuntimeLoader,enableConfigurationOverride,managedPipelineMode,CLRConfigFile,passAnonymousToken,startMode,processModel_identityType,processModel_userName,processModel_password,processModel_loadUserProfile,processModel_logonType,processModel_manualGroupMembership,processModel_idleTimeout,processModel_maxProcesses,processModel_shutdownTimeLimit,processModel_startupTimeLimit,processModel_pingingEnabled,processModel_pingInterval,processModel_pingResponseTime,recycling_disallowOverlappingRotation,recycling_disallowRotationOnConfigChange,recycling_logEventOnRecycle,recycling_periodicRestart_memory,recycling_periodicRestart_privateMemory,recycling_periodicRestart_requests,recycling_periodicRestart_time,recycling_periodicRestart_schedule_[value='timespan']_value,failure_loadBalancerCapabilities,failure_orphanWorkerProcess,failure_orphanActionExe,failure_orphanActionParams,failure_rapidFailProtection,failure_rapidFailProtectionInterval,failure_rapidFailProtectionMaxCrashes,failure_autoShutdownExe,failure_autoShutdownParams,cpu_limit,cpu_action,cpu_resetInterval,cpu_smpAffinitized,cpu_smpProcessorAffinityMask,cpu_smpProcessorAffinityMask2-->      
  </MsDeploySourceManifest>    
</ItemGroup>

Извините, я не могу более подробно описать это, но прошло некоторое время с тех пор, как я написал этот код, и у меня просто нет времени. Вы можете найти некоторую информацию в Интернете о создании пользовательских поставщиков. Если у вас есть дополнительные вопросы, я постараюсь ответить, когда у меня будет время.

Надеюсь, что это поможет

Ответ 2

Не удалось найти меня, когда я был веб-развертыванием из Visual Studio 2010 sp1 службы WCF С#, которую я создавал в соответствии с инструкциями: http://technologyriver.blogspot.fi/2012/02/prerequisites-check-windows-7.html

Я получил ошибку: Ошибка 1 Не удалось выполнить задачу веб-развертывания. (Пул приложений, который вы пытаетесь использовать, имеет свойство "managedRuntimeVersion", установленное в "v2.0". Для этого приложения требуется "v4.0".) 0 0 WcfService3

Поскольку у меня нет полного IIS, но IIS Express я не могу пойти к менеджеру. После некоторых дат с мр. Google и ms. Bing я нашел решение, глядя на мое лицо.

Исправление заключается в использовании явно правильного имени веб-службы вместо стандартного, используемого в примере.

Решение: Сначала откройте файл конфигурации IIS Express % USERPROFILE%\Документы\IISExpress\Config\ApplicationHost.config

Проверьте сайт по умолчанию, который у вас есть, в моем случае это было:

<site name="WebSite1" id="1" serverAutoStart="true">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":8080:localhost" />
  </bindings>
</site>

Убедитесь, что пул приложений для сайта верен, в моем случае "Clr4IntegratedAppPool"

На этапе развертывания, как указано в связанном блоге, в качестве сайта/приложения используется "Веб-сайт по умолчанию /MyApp ".

Для меня правильная настройка, как видно из конфигурации сайта, будет "WebSite1", а также URL-адрес службы в развертывании требует привязки к порту и будет в моем случае "localhost: 8080"

Если вы чувствуете, что хотите большего определения, создайте совершенно новый сайт с собственным пулом в конфигурации и используйте его в развертывании. Некоторые примеры в этом направлении можно найти здесь: http://www.philliphaydon.com/2012/06/multiple-iisexpress-sites-profiled-with-dottrace/

Надеюсь, это поможет любому из вас избежать разочаровывающих дат с поисковыми машинами.

С уважением, Петтери Куяла