Интеграция без папок. Часть вторая. Размещаем сервис на IIS

20 5

В прошлой статье мы создавали простейший web-сервис.

 

Так как web-сервис это серверное приложение, то он должен быть размещен в среде, которая обеспечит к нему доступ клиентов. В этой части серии статей рассмотрим как разместить наш простейший web-сервис на IIS. Мы разместим наш сервис и сделаем его доступным по HTTP протоколу.

Рассмотрим два способа:

  • Размещение на IIS Express. Это облегченная и автономная версия IIS для разработчиков. Используется на стадии разработки сервиса. Express имеет свои ограничения: поддерживаются только http и https протоколы;
  • Размещение на IIS. IIS это мощный, и как многие считают, лучший инструмент для хостинга сервиса, за счет больших возможностей по управлению тредами, процессами, безопасностью и масштабируемостью. 

Размещаем на IIS Express

Создаем сайт для сервиса

Добавим шаблон сайта по контекстному меню от решения:

Выбрать пустой веб-сайт ASP.NET.Расположение указать в файловой системе. Папку расположения указать отдельную в решении (т.е. указать новую папку внутри папки решения, папка будет создана автоматически).

Получится примерно вот так:

Далее назначим сайт запускаемым проектом.

Т.к. мы хотим чтобы наш сервис располагался на этом сайте, то необходимо добавить ссылку на сервис на сайт. Для этого в контекстном меню сайта выбираем "Добавить ссылку".

Выбрать Решение/Проекты. Наш сервис.

В результате у нас появилась папка Bin.

Если сейчас нажать на сайте Ctrl+F5 (Запуск без отладки), то получим следующую страницу:

Когда сайт работает у вас в трее будет значок IIS Express.

Когда новый сайт создается в VS IIS Express автоматически назначает ему порт.

Обычно IIS Express запускается из VS когда нужно отладить сайт. Если нужно IIS Express запустить во вне VS, то можно использовать следующую командную строку:

"C:\Program Files\IIS Express\iisexpress" /path:c:\myapp\ /port:[your_port] /clr:v4.0

В моем случае:

"C:\Program Files (x86)\IIS Express\IISExpress.exe" /path:D:\WCFClubProject\HelloService\HostWebSite /port:17587 /clr:v4.0

Работаем над Web.config

На текущий момент посмотреть (Ctrl+F5) WSDL сервиса не получилось, т.к. мы не обозначили web.config.

Добавим секцию system.servicemodel в конфиг:

    
    
      
        
      
    
    
      
        
          
        
      
    
  

Получилось:

Где:

  • Сама секция system.serviceModel содержит все настройки WCF-сервиса;
  • Секция serviceHostingEnvironment определяет настройки размещения;
  • Секция serviceActivations позволяет расписать "активацию" службы. Т.е. указать  имя службы и ее относительный адрес. Подробнее: https://msdn.microsoft.com/ru-ru/library/ee358764(v=vs.110).aspx#Anchor_0 .

Теперь добавив к адресу http://localhost:17587, то что мы написали в relativeAddress, то получим http://localhost:17587/HostWebSite/ARVIClubService.svc. Открыв эту ссылку мы увидим службу:

Тестируем сервис SOAP UI

Чтобы потестировать наш сервис проще всего использовать SOAP UI.

Открываем утилиту и создаем новый проект:

Вписываем адрес WSDL, который у нас был на странице сервиса в последнем рисунке предыдущей главы.

Нажимаем "ОК" SOAP UI видит наш сервис:

П.С. У кого была ошибка вида "soap parsing wsdl error: Unexpected element: TAG_END", тому нужно выключить прокси:

Теперь открываем Request 1, заполняем параметр метода name, нажимаем кнопку Submit.

Сервис работает.

Размещаем на IIS

Подготовка папок и файлов:

Сделаем в папке проекта папку HostIIS, а в ней папку bin

 

Скопируем файл *.dll и *.pdb из папки bin/debug сервиса в созданную папку для IIS

 

 

Скопируем web.config из папки сайта для IIS Express в папку HostIIS

 

 

Создадим папки в нашем решении аналогичной структуры:

 

В каждую папку добавим те файлы которые там должны быть


Сделаем так, чтобы после построения сервиса файлы *.dll и *.pdb автоматически копировались в нашу новую bin. Для этого в свойствах нашего сервиса на событии после построения укажем переписывать собранные файлы в нашу новую bin.

xcopy "$(AssemblyName).dll" "D:\WCFClubProject\HelloService\HostIIS\bin" /Y
xcopy "$(AssemblyName).pdb" "D:\WCFClubProject\HelloService\HostIIS\bin" /Y

Теперь перейдем к IIS.

Откроем диспетчер IIS (команда inetmgr в cmd). Если ничего не открывается, то у вас не установлены компоненты IIS, их нужно установить, а потом зарегистрировать aspnet_regiis.exe (подробнее в google);

Убедимся, что наш пул приложений по умолчанию использует .NET 4.0.30319. Для этого на списке пулов приложений, выбрать по умолчанию, посмотреть его свойства.

 

Добавим новое приложение к сайту по умолчанию

 

Укажем Имя, наш пул по умолчанию, и физический путь до папки которую мы делали специально для IIS.

Разрешим пользователям пула приложений читать с нашей папки.

 

Поправим relative address в web.config на relativeAddress="./ARVIClubService.svc"

 

Заходим на адрес http://localhost/ARVIClubService/ARVIClubService.svc

где:

  • http://localhost/ - это адрес сайта по умолчанию
  • ARVIClubService - это виртуальный путь к сервису. Это можно глянуть в диспетчере IIS
  • /ARVIClubService.svc - это relativeAddress в web.config

Работает:

Также можно проверить через SOAP UI:

Прикрепляю папку всего решения 

HelloService.zip (28,28 Кб)

 

Алексей Семакин
Убедимся, что наш пул приложений по умолчанию использует .NET 4.0.30319.

В точности эта версия и ни влево, ни вправо? Через год, например, это требование останется актуальным?

Артур Шахмин
В точности эта версия и ни влево, ни вправо? Через год, например, это требование останется актуальным?

Насколько я понимаю, через год или три ничего не изменится, просто вариантов добавится, например, с пятым .NET Framework.
Там сейчас у всех три одинаковых варианта (у тебя тоже должно быть так).

  • без управляемого кода
  • 2.0.50727
  • 4.0.30319
Алексей Пантюхин

Описано просто и доступно.

Дмитрий Гойнаш

После текста:

"Добавим секцию system.servicemodel в конфиг:"

отображается набор пробелов(((

Марина Котусева

Спасибо огромное!

Авторизуйтесь, чтобы написать комментарий