ОК, вот что я придумала.
Упаковка
Сначала упаковка.Используйте msbuild.Примерно так (очевидно, вам нужно использовать версию .NET версии v4 или лучше, чтобы добиться успеха):
C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe {project_file} /t:package /target:Build /p:PlatformTarget=x86;
Довольно просто, верно?
Развертывание
Теперь бонусная часть вопроса, развертывание.Это состоит из легкой части и твердой части.Самым простым было получить ZIP-файл, созданный с помощью msbuild.exe, добавленного в IIS.Я нашел 2 возможности.
Командная строка
Первая - это командная строка, которая доставила мне проблемы (что-то из-за невозможности привести ' Microsoft.Web.Deployment.DeploymentProviderOptions ' к типу '' Microsoft.Web.Deployment.DeploymentProviderOptions '--- Я ЗНАЮ, ПРАВО? ).Во всяком случае, это та командная строка, которую я использовал.Это может кому-то помочь, а может и нет.Опять же, у меня были проблемы с этим.
c:\inetpub\wwwroot>"c:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -presync:runCommand="md c:\inetpub\wwwroot\{MyWCFCodeDest} & c:\windows\system32\inetsrv\appcmd add site /name:{MyWCFCodeDest} /id:22 bindings:http/*:54095: /physicalPath:c:\inetpub\wwwroot\{MyWCFCodeDest}" -source:package={ZipFileFromMSBuild.exe} -dest:auto -setParam:"IIS Web Application Name"="{MyIISName}"
Интерфейс
ОК, поэтому я решил, что буду рад использовать второй способ.Это, безусловно, самое простое, если вы не заботитесь об автоматизации.Откройте диспетчер IIS, щелкните правой кнопкой мыши компьютер ИЛИ веб-сайт (в зависимости от того, хотите ли вы использовать его как собственный веб-сайт или приложение на существующем веб-сайте), разверните, импортируйте и следуйте указаниям мастера до конца.
Ошибки в развертывании
А теперь, где я провел большую часть своего времени.Я ударил недавно развернутый файл .svc и получил ошибку.Эта ошибка связана с сертификатом, который я использовал.Теперь, может быть, не все развертывания будут беспокоиться об этом, но мой сделал.Ошибка была длительной, что-то в "набор ключей не существует" и "невозможно активировать из-за исключительной ситуации во время компиляции" и "может не иметь закрытого ключа, которыйспособный к обмену ключами, или процесс может не иметь прав доступа к закрытому ключу ".Я перепробовал множество вещей, включая использование mmc для повторного импорта сертификатов и makecert для воссоздания как моего CA, так и моего личного сертификата.Ничто из этого не было проблемой для меня (ymmv).Наконец, я сосредоточился на правах пользователя.Я обнаружил, что если я предоставил пользователю «Все» разрешение на закрытый ключ для сертификата (сертификат должен иметь закрытый ключ), все работало.Очевидно, что это не решение, которое я хочу для клиента, поэтому я нашел правильного пользователя, которому он должен предоставить права.Удивительно, но это заняло некоторое время.На разных веб-сайтах я добавлял сетевую службу, ASPNET, текущего пользователя, пользователя, указанного в machine.config (который находится где-то в каталоге .NET), IIS_ {MachineName} ... ни один из них не работал.Я должен был добавить IIS_IUSRS .
Итак, горстка икры, которая может помочь вам в здравом уме, когда вы кричите на свой монитор, что это не работает для вас, несмотря на то, что вы следуете всем указаниям.Потому что, по-видимому, со временем IIS меняется слишком сильно, и этот материал имеет значение:
Windows 7 Ultimate sp1
IIS 7.5.7600.16385
Полезные материалы по теме
Кроме того, некоторые инструменты командной строки, которые могут вас заинтересовать:
- winhttpcertcfg.exe -l -c LOCAL_MACHINE \ My -s "{cert_name}" - список авторизованных пользователейполучить доступ к закрытому ключу сертификата (вы также можете сделать это по старинке через свойства файла);Я попытался загрузить winhttpcertcfg.exe, но он был частью пакета Windows 2003, который выдает предупреждения о несовместимости (не уверен, что это произошло из-за моей попытки установить этот файл или теперь он идет с чем-то, что я уже установил)
- winhttpcertcfg.exe -g -c LOCALHOST \ My -s "{cert_name}" -a IIS_IUSRS - добавляет IIS_IUSRS к разрешениям для закрытого ключа сертификата
- findprivatekey.exeMy LocalMachine -n "{cert_name}" - Находит файл личного ключа для указанного сертификата;по какой-то причине это инструмент, который вы должны собрать в Dev Studio самостоятельно (можно найти в некоторых примерах WCF, загруженных из Microsoft)
- cacls.exe {private_key_file_for_cert} / E / G "IIS_IUSRS" - еще один способ добавить пользователя к разрешениям личного ключа
- mmc - запускает менеджер для установленного сертификата
- makecert -n "CN = {CertificateAuthorityName}" -r -sv {CertificateAuthorityName} .pvk {CertificateAuthorityName} .cer - создать сертификат центра сертификации
- makecert -sk {SignedCertName} -iv {CertificateAuthorityName} .pvk -n "CN = {SignedCertName}" -ic {CertificateAuthorityName} .cer {SignedCertName} .cer -srlocalmachine -ss My - создать сертификат, подписанный центром сертификации
И последнее: если вы хотите импортировать сертификаты с помощью mmc, вам нужно запустить mmc, File-> Add / Remove Snapin,Добавьте оснастку «Сертификаты».Импортируйте центр сертификации в доверенные корневые центры сертификации и сертификат, подписанный центром сертификации, в Personal.
Надеюсь, вам здесь понравилось.Пожалуйста, подождите, пока браузер полностью остановится, прежде чем выйти, и не забудьте взять с собой какие-либо личные вещи.
Дополнительные открытия
Когда пришло время развертывать все на тестовом сервере (а не на моей машине для разработки), я не ожидал всех неприятностей, с которыми столкнулся.Я снова документирую это здесь, чтобы помочь какой-то другой бедной, потерянной душе (или мне позже).
-Это должно быть очевидным: FindPrivateKey.exe не на сервере.Мне пришлось прыгать через несколько обручей, чтобы получить его там.ymmv.
-Только версия 4.0 .NET клиента была установлена на сервере.К тому времени, когда я обнаружил это И понял, что это проблема, прошло несколько часов.Обнаружение установленных версий .NET предоставлено netfx_setupverifier , которое я получил с одного из веб-сайтов Microsoft.Версия клиента не включает в себя все компоненты WCF.
-IIS требовались некоторые дополнительные настройки (файлы, найденные в каталоге версий .NET Framework, запускаются из командной строки):
aspnet_regiis.exe -i -enable
ServiceModelReg.exe -r
- cacls.exe сообщил мне, что он устарел и что я должен использовать icacls.exe .Командная строка для icacls выглядит примерно так:
icacls.exe {private_key_file_for_cert} /GRANT "IIS_IUSRS":R
(заметьте, у меня это точно не сработало, но вы всегда можете просто зайти в файл {private_key_file_for_cert}, возможно, в ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys,и дать разрешения через проводник - щелчок правой кнопкой мыши - свойства)
- Возможно, вам понадобится добавить сопоставление обработчика для WCF.Я настоятельно рекомендую запустить его в пуле приложений .NET v4.0.