Создание пакета webdeploy для веб-сайта при создании решения

У меня есть сервисное решение WCF VS 2010, которое я хотел бы развернуть на серверах IIS 7.5 через пакет веб-развертывания. Я хотел бы создать пакет веб-развертывания при сборке проекта службы WCF. Я видел другие примеры того, как инициировать пакет веб-развертывания после сборки через импорт целей MS Build для веб-развертывания в.csproj. Но я не могу обернуться вокруг вещей, которые я могу или не могу сделать таким образом.

Я хочу, чтобы мой пакет веб-развертывания выполнял следующие задачи при развертывании на целевом сервере:

  • Создайте новый веб-сайт на целевом сервере с пулом приложений для целевой платформы 4.0, которая использует идентификатор NETWORK SERVICE
  • Добавьте привязки сайтов, чтобы включить net.tcp для определенного порта и включить протоколы http и net.tcp.
  • Создайте веб-приложение на этом новом сайте, чтобы указать на конкретную папку файловой системы
  • Запустите файл.bat, чтобы запустить несколько связанных с net.tcp сервисов для поддержки не http-активации WCF.

Из всего, что я читал о веб-развертывании, некоторые из них могут быть сделаны через файлы манифеста webdeploy и включая определенных поставщиков. Чего я не понимаю, так это сказать механизму упаковки компоновки MS, чтобы он передавал провайдерам данные в манифест и значения. Я довольно новичок в веб-развертывании, и любая помощь / указатели для решения этой проблемы будет принята с благодарностью.

3 ответа

Первые три пункта можно сделать, используя appHostConfig провайдер, который должен быть включен, если вы установите IncludeIisSettings а также UseIis свойства как true,

Последний пункт можно сделать через runCommand провайдер как часть вашего манифеста или через preSync / postSync,

WPP (материал MSBuild поверх MSDeploy) не поддерживает preSync / postSync, но вы можете включить runCommand провайдер явно использует MsDeploySourceManifest:

<!-- Create a WebProjectName.wpp.targets file in the root 
     of your web application (WebProjectName)
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <AfterAddContentPathToSourceManifest>
      $(AfterAddContentPathToSourceManifest);
      AddPostSyncProviders
    </AfterAddContentPathToSourceManifest>
  </PropertyGroup>

  <Target Name="AddPostSyncProviders">
    <MsDeploySourceManifest Include="runCommand">
      <Path>absolute path to exe on target machine</Path>
    </MsDeploySourceManifest>
  </Target>
</Project>

К вашему сведению - runCommand может выполнить только абсолютные пути на целевой машине в соответствии с этим вопросом.

Я использую подход MSBuild для сборки пакета и MSDeploy для его развертывания на сервере. Я использую следующую командную строку, в моем случае я использую круиз-контроль:

/p:Configuration=Release 
/p:MSDeployPublishMethod=WMSVC 
/p:DeployOnBuild=True 
/p:DeployTarget=Package 
/p:CreatePackageOnPublish=True 
/p:DeployIisAppPath=$(SolutionName)/$(ProjectName) 
/p:MsDeployServiceUrl=https://<servername>:8172/MsDeploy.axd 
/p:AllowUntrustedCertificate=True 
/p:username=<username>
/p:password=<password>
/p:EnablePackageProcessLoggingAndAssert=True
/p:PackageLocation=$(WorkingMainDir)$(ProjectName)$(ProjectType)\Package\$(SolutionName).zip
/p:IntermediateOutputPath=$(WorkingMainDir)$(ProjectName)$(ProjectType)\Temp\
/p:AutoParameterizationWebConfigConnectionStrings=true
/p:UseWPP_CopyWebApplication=true

Затем я использую msdeploy для развертывания результирующего пакета, следующая ссылка (принятый ответ) является хорошим описанием того, как это сделать:

Сбой msdeploy (Web Deploy) с проблемами аутентификации 401

Попробовал это, но проект не может быть загружен после этого: элемент ниже не распознан.

Другие вопросы по тегам