Как управлять AppPool, используемым для развертывания, через настройки VS & MSDeploy - PullRequest
20 голосов
/ 07 октября 2011

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

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

Вопрос:

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

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

1. Параметр MSBuild

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

/p:IncludeAppPool=true

2. Настройка файла settings.xml

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

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

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

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

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

5. MSDeploy имеет провайдера appPoolConfig

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

Ответы [ 2 ]

12 голосов
/ 26 октября 2011

Я также начинаю искать возможности для достижения этой цели.

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

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

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

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

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

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

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

Edit:

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

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

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

Чтобы использовать этого провайдера, следует поместить скомпилированную dll в папку Extensibility (вы должны создать ее самостоятельно в «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 голосов
/ 01 августа 2013

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

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

Поскольку у меня нет полного IISно IIS Express не могу пойти к менеджеру.После некоторых встреч с г-ном.Гугл и мс.Я нашел решение, глядя мне в лицо.

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

Решение: Сначала откройте IIS Expressфайл конфигурации% userprofile% \ documents \ 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/

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

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

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