Сборка, запуск и местоположение примеров WCF.

Исходные тексты и собранные модули

Исходные тексты примеров данной главы собраны в файле WCF.zip, который устанавливается в подкаталоге Examples КриптоПро .NET SDK, по умолчанию директория %ProgramFiles(x86)%\Crypto Pro\.NET SDK\Examples. Все примеры данной главы реализованы на C#. Для работы с примерами необходимо распаковать файл с исходными текстами примеров в рабочую директорию (не рекомендуется использовать поддиректории %ProgramFiles(x86)%\Crypto Pro\.NET SDK).

Как собрать пример

Сборка примеров из этой главы осуществляться вызовом программы msbuild.exe из состава .Net Framework 3.5 или .Net Framework 4.0 с передачей ей имени соответствующего (по номеру .Net Framework) проекта. Например, для сборки базового примера клиента при использовании MSBuild из состава .Net Framework 3.5 необходимо выполнить

 Copy imageCopy Code
%windir%\Microsoft.NET\Framework\v3.5\MSBuild.exe Base.Client.35.csproj

Для сборки примера можно использовать Microsoft Visual Studio как через файл проекта, так и через файл решения (solution). Решения приведены для каждой группы примеров (клиент и сервера) Решение *.2008.sln или проект *.35.csproj для Microsoft Visual Studio 2008; решение *.2010.sln или проект *.40.csproj для Microsoft Visual Studio 2010. При сборке через проект, как средствами msbuild так и средствами среды разработки, собранный исполняемый файл копируется в директорию bin\Debug (bin\Release при сборке Release конфигурации).

Как запустить пример в режиме SelfHost

Перед запуском примера следует убедиться в незанятости порта 8000 для взаимодействии с клиентом. Для запуска примера необходимо перейти в директорию с собранным исполняемым файлом SelfHost, например Base\SelfHost\bin\Debug, и запустить исполняемый файл сервера, например

 Copy imageCopy Code
Base.SelfHost.exe

Следующим этапом выполняется запуск клиента. Для этого необходимо отредактировать конфигурационный файл клиента app.config (либо до сборки в исходном каталоге, либо после сборки в каталоге с исполняемыми файлами): необходимо закомментировать привязку к *.IIS и раскомментировать привязку *.SelfHost. Далее необходимо перейти в каталог с собранными исполняемыми файлами клиента, например Base\Client\bin\Debug, и запустить исполняемый файл клиента, например

 Copy imageCopy Code
Base.Client.exe

При успешном завершении примера на консоль клиента выводится

 Copy imageCopy Code
100 + 15,99 = 115,99
145 - 76,54 = 68,46
9 * 81,25 = 731,25
22 / 7 = 3,14285714285714

Нажмите <ENTER> для завершения клиента.

При успешном завершении примера на консоль сервера выводится

 Copy imageCopy Code
                    Сервис готов.
                    Нажмите <ENTER> для завершения сервиса.

                    100 + 15,99 = 115,99
                    145 - 76,54 = 68,46
                    9 * 81,25 = 731,25
                    22 / 7 = 3,14285714285714
                

Как запустить пример в режиме IIS

Не все примеры могут быть запущены в данном режиме.

Для запуска примера необходимо иметь установленный и сконфигурированный IIS на локальном компьютере (использование IIS на удаленном компьютере потребует изменений в конфигурации). Примеры настроены на использование стандартного порта http - 80. IIS должен быть настроен на использование платформы .Net Framework 2.0, должны быть зарегистрированы соответствующие обработчики (svc, ... ) Необходимо создать виртуальный каталог IIS (имя виртуального каталога приводится в описании к примеру) на каталог с примером IIS (например Base\IIS).

Следующим этапом выполняется запуск клиента. Для этого необходимо отредактировать конфигурационный файл клиента app.config (либо до сборки в исходном каталоге, либо после сборки в каталоге с исполняемыми файлами): необходимо закомментировать привязку к *.SelfHost и раскомментировать привязку *.IIS . Далее необходимо перейти в каталог с собранными исполняемыми файлами клиента, например Base\Client\bin\Debug, и запустить исполняемый файл клиента, например

 Copy imageCopy Code
Base.Client.exe

При успешном завершении примера на консоль клиента выводится

 Copy imageCopy Code
100 + 15,99 = 115,99
145 - 76,54 = 68,46
9 * 81,25 = 731,25
22 / 7 = 3,14285714285714

Нажмите <ENTER> для завершения клиента.

Настройка сертификата ssl на соответствующий порт

Часть примеров (в описании к примеру это указывается) требуют настройки соответствия сертификата ssl на соответствующий порт. Такая настройка необходима для самостоятельного приложения службы (SelfHost) Так как для каждого порта можно задать только один сертификат, а во всех примерах используется один и тот же порт (8000), то для корректной работы всех примеров можно использовать один из следующих вариантов

  • Использовать во всех примерах один и тот же сертификат сервера. В этом случае необходимо единожды задать соотвтетствие для всех примеров.

  • Использовать разные сертификаты. В этом случае перед сменой примера необхоимо каждый раз переконфигурировать соответствие сертификата и порта.

  • Использовать разные порты для разных примеров. Для этого необходимо изменить номер порта привязки клиента в конфигурационном файле и изменить номер порта привязке в исходных текстах сервера.

Настройка сертификата ssl осуществляется в Windows 2008 и Windows 7 при помощи встроенной утилиты netsh; в Windows XP и Windows 2003 при помощи утилиты HttpCfg, которая не устанавливается по умолчанию при установки ОС.

В Windows XP и Windows 2003 установить утилиту HttpCfg можно с дистрибутивного диска ОС из каталога \SUPPORT\TOOLS. запустив suptools.msi. В процессе установки необходимо выбрать или полную установку или при выборочной установке выбрать установку Optional Tools. По умолчанию установка будет произведена в каталог C:\Program Files\Support Tools. Если утилиты установлены в другой каталог, то необходимо отредактировать пути к утилите HttpCfg во всех cmd файлах поставляемых с примерами.

Утилита настройки сертификата для Ssl осуществляет поиск сертификата по его отпечатку (fingerprint). Отпечаток представляет собой последовательность из 20 байт. Найти отпечаток можно при просмотре сертификата. Отпечаток передается в утилиту настройки в виде последовательности 40 16-ричных цифр.

В состав примеров, для которых необходима настройка сертификата для Ssl, входят 3 командных файла certview.cmd, certdel.cmd и certadd.cmd.

Просмотр текущей настройки для порта 8000 осуществляется запуском команды certview.cmd

Удаление всех сертификатов призяванных к порту 8000 осуществляется вызовом команды certdel.cmd.

Перед установкой сертификата для приложения на сответствующий порт необходимо отредактировать файл certadd.cmd изменив переменную окружения certhash на требуемый отпечаток сертификата. Запуск команды certadd.cmd установит соответствие сертификата и номера порта.

При возникновении ошибки 1312 при установке соответствия между портом и сертификатом рекомендуем ознакомиться KB981506

Генерация и настройка сертификата и секретного ключа сервиса

Часть примеров (в описании к примеру это указывается) требуют наличия сгенерированного секретного ключа и соответсвующего сертификата.

Секретный ключ службы должен быть создан для локальной машины (с флагом LOCAL_MACHINE), быть ключом обмена (exchange), иметь назначение "Проверка подлинности сервера"; cертификат должен иметь имя: "CN=localhost, OU=Sharpei, O=CryptoPro, C=RU", и быть установлен в хранилище локальной машины Личное (MY) с привязкой к секретному ключу. В хранилище сертификатов локальной машины, на котором происходит запуск службы, должны быть установлены соответствующие корневые, в хранилище "Доверенные корневые центры сертификации" (Root), и промежуточные, в хранилище "Промежуточные центры сертификации" (Intermidiate) сертификаты цепочки. При запуске сервиса с использованием IIS необходимо убедиться, что пул приложений IIS (в котором находится запускаемый сервис) имеет доступ к секретным ключам локальной машины; в противном случае необходимо предоставить полный доступ удостоверению пула IIS права на ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Keys для платформы Win32 или HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Keys для платформы x64. В "боевом" приложении рекомендуется предоставлять права только на соответствующий ключ (как в смысле реестра так и в криптографическом смысле).

Генерация и настройка сертификата и секретного ключа клиента

Секретный ключ клиента должен быть создан для пользователя (CURRENT_USER) из под которого будет происходить запуск клиента, быть ключом обмена (exchange), иметь назначение "Проверка подлинности клиента"; cертификат должен содержать имя: "TestGostNet", и быть установлен в хранилище пользователя Личное (MY) с привязкой к секретному ключу. В хранилище сертификатов пользователя, на котором происходит запуск службы, должны быть установлены соответствующие корневые, в хранилище "Доверенные корневые центры сертификации" (Root), и промежуточные, в хранилище "Промежуточные центры сертификации" (Intermidiate) сертификаты цепочки; при запуске клиента и сервера на одной машине достаточно установить корневые и промежуточные сертификаты в хранилище локальной машины.

Настройка привязки net.tcp для IIS

Часть примеров (в описании к примеру это указывается) требуют соответствующей настроек net.tcp для IIS. Перед запуском таких примеров необходимо убедиться, что в системе запущена "Служба общего доступа к портам Net.Tcp". Это можно сделать как через контрольную панель, так и при помощи команды

 Copy imageCopy Code
                    sc query nettcpactivator
                

Если служба отсутствует или остановлена, то, скорее всего, компонента (для клиентских Windows или роль для серверных) не установлена. Компоненту (роль) Microsoft .Net Framework 3.5.1/Windows Communication Foundation Non-HTTP Activation. можно установить как через контрольную панель так и используя команду:

 Copy imageCopy Code
                    pkgmgr /iu: WCF-NonHTTP-Activation
                

Так же необходимо убедиться в наличии сконфигурированной привязки протокола net.tcp к хосту. При первичной установке хоста такая привязка обычно выполнена, для остальных хостов необходимо выполнить привязку протокола net.tcp к порту 808. Это можно сделать как при помощи оснастки IIS так и испольую команду

 Copy imageCopy Code
                    appcmd set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
                

не забыв заменить имя хоста по умолчанию. Далее необходимо разрешить порт net.tcp для данного приложения. Обычно такая привязка уже выполнена, при необходимости ее можно включить, используя оснастку Windows или команду

 Copy imageCopy Code
                    appcmd set app "Default Web Site/myapp" /enabledProtocols:net.tcp
                

Не забыв поменять имя зоста и приложения.

См. также