Порядок установки прикладного решения "Grotem Express"
Заполнение паспорта клиента
Получить от клиента следующие параметры:
Здесь и далее считаем, что все компоненты работают на одном веб-сервере. Сервер БД при этом может отличаться.
<внешний адрес>
- внешний IP-адрес или доменное имя и порт, по которым будет осуществляться доступ к прикладному решению.<порт>
- порт, на котором будет отвечать веб-сервер<имя установки>
- желаемое имя прикладного решения (видаhttp://<адрес сервера>:<порт>/<имя установки>
) (EN, без пробела)- данные для подключения к серверу MSSQL:
<адрес СУБД>
- адрес или имя сервера- тип аутентификации (встроенная или Windows)
- логин и пароль для аутентификации в СУБД
Установка необходимых компонентов
Настойка операционной системы
- Проверить наличие SQL и IIS (см. Минимальные требования)
- установить .NET версии 4.6.1 (или выше)
- установить ASP.NET Core 2.2 Runtime (ссылка на скачивание)
- установить ASP.NET Core 3.0 Runtime (ссылка на скачивание)
- установить ASP.NET Core 3.1 Runtime (ссылка на скачивание)
- убедиться, что установлены необходимы компоненты для IIS. В случае необходимости - установить (вручную или скриптом).
Внимание: Версии ASP.NET Core необходимо устанавливать последовательно - сначала 2.2, затем 3.0 и 3.1. После установки ASP.NET Core 2.2 Runtime и ASP.NET Core 3.0 Runtime обязательно требуется перезагрузка сервера (операционной системы).
Cкрипт для выполнения установки (запустите командную консоль от имени администратора, скопируйте текст полностью и выполните как одну команду):
```
dism.exe /online /enable-feature /featurename:IIS-ApplicationDevelopment /featurename:IIS-ASPNET /featurename:IIS-BasicAuthentication /featurename:IIS-CommonHttpFeatures /featurename:IIS-CustomLogging /featurename:IIS-DefaultDocument /featurename:IIS-DigestAuthentication /featurename:IIS-DirectoryBrowsing /featurename:IIS-HealthAndDiagnostics /featurename:IIS-HttpCompressionDynamic /featurename:IIS-HttpCompressionStatic /featurename:IIS-HttpErrors /featurename:IIS-HttpLogging /featurename:IIS-HttpTracing /featurename:IIS-ISAPIExtensions /featurename:IIS-ISAPIFilter /featurename:IIS-LoggingLibraries /featurename:IIS-ManagementConsole /featurename:IIS-ManagementScriptingTools /featurename:IIS-NetFxExtensibility /featurename:IIS-RequestFiltering /featurename:IIS-RequestMonitor /featurename:IIS-Security /featurename:IIS-StaticContent /featurename:IIS-WebServer /featurename:IIS-WebServerManagementTools /featurename:IIS-WebServerRole /featurename:IIS-WindowsAuthentication /featurename:IIS-ASPNET45 /featurename:IIS-NetFxExtensibility45 /featurename:IIS-NetFxExtensibility /featurename:NetFx4Extended-ASPNET45
```
если в системе отсутствует утилита dism.exe, то можно воспользоваться следующей командой:
```
start /w pkgmgr /l:log.etw /iu:IIS-ApplicationDevelopment;IIS-ASPNET;IIS-BasicAuthentication;IIS-CommonHttpFeatures;IIS-CustomLogging;IIS-DefaultDocument;IIS-DigestAuthentication;IIS-DirectoryBrowsing;IIS-HealthAndDiagnostics;IIS-HttpCompressionDynamic;IIS-HttpCompressionStatic;IIS-HttpErrors;IIS-HttpLogging;IIS-HttpTracing;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-LoggingLibraries;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-NetFxExtensibility;IIS-RequestFiltering;IIS-RequestMonitor;IIS-Security;IIS-StaticContent;IIS-WebServer;IIS-WebServerManagementTools;IIS-WebServerRole;IIS-WindowsAuthentication;IIS-ASPNET45;IIS-NetFxExtensibility45;IIS-NetFxExtensibility;NetFx4Extended-ASPNET45
```
Настройка веб-сервера IIS
- установить модуль "URL Rewrite" для IIS по ссылке Microsoft URL Rewrite Module 2.0 for IIS 7 (x86) (для 32-бит) и URL Rewrite Module 2.0 for IIS 7 (x64) (для 64-бит). Убедиться, что появился соответствующий значок в настройках IIS.
- В IIS настроить пулы приложений и аутентификацию для них (вручную или скриптами)
- <параметры пула>
- при необходимости, включить в используемом пуле поддержку 32-хбитный приложений
- Убедиться, что пулы запускаются от имени пользователя, имеющего доступ для создания БД на SQL-сервере (при использовании Windows-аутентификации). Если на SQL-сервере используется встроенная аутентификация - настройки пользователя будут задаваться далее.
Установка прикладного решения
Предварительное развертывание
- Cкачать пакет с решением и распаковать его в нужное место (по умолчанию - в корень системного диска C: ). На каталог назначить права для пользователя, от имени которого запускается пул приложений.
Структура каталога следующая:
express
- каталог прикладного решенияadmin
- в каталоге лежит веб-интерфейс и все для его настройкиapp
- каталог для размещения сборок мобильного приложенияservices
- каталог с веб-сервисами
GrotemServer
- каталог, в котором рекомендуется разворачивать сервер Grotem.Mobilesolutions
- каталог, в котором рекомендуется разворачивать решения (задается в настройках сервера Grotem.Mobile)metadata
- каталог с файлами для создания мобильного решения (metadata.xml и т.д.)
2. Скачать и распаковать архив сервера Grotem.Mobile по ссылке https://develop.superagent.ru, содержимое архива распаковать и переместить в каталог GrotemServer.
Внимание: для работы приложения Grotem.Express необходимо скачивать сервер версии 3. Сервер версии 2 с приложением Grotem.Express не совместим.
В итоге, в каталоге GrotemServer должна получиться следующая структура:
- bitmobile3 - каталог с сервером Grotem
- fiscal - сервис фискализации для работы с Атол-Онлайн
- fiscaldevices - сервис фискализации для работы с физической кассой на сервере (ссылка на инструкцию по установке и настройке)
- gateway - шлюз для работы с сервером Grotem и другими сервисами
- synchronization - сервис синхронизации
3. На каталог с сервером и прикладным решением назначить права для пользователя, от имени которого запускается пул приложений (желательно создать отдельного пользователя с ролью локального администратора, в примере - пользователь grotem):
Установка и настройка сервера Grotem.Mobile
Установка шлюза gateway
В оснастке "Диспетчер служб IIS" нужно добавить новое приложение. Для этого:
- в структуре перейти на "Default Web Site"
- в контекстном меню выбрать пункт "Добавить приложение..."
- в поле "Псевдоним" указать
GrotemServer
- в поле "Пул приложений" выбрать ранее созданный пул "grotem_pool"
- в поле "Физический путь" указать путь до каталога "gateway", внутри распакованного архива сервера Grotem.Mobile
Рекомендуется установить пользователя с ролью администратора по кнопке "Подкл. как..." и затем выполнить "Тест настроек", чтобы убедиться в корректной работе.
Далее, в проводнике Windows открыть каталог gateway, в нем найти файл appsettings.example.json и скопировать его под именем appsettings.json. В этом файле заполнить секции:
"Jwt": {
"Issuer": "Identity.API",
"Audience": "http://localhost",
"Key": "{some_big_key_value_here_secret}"
},
"Urls": {
"Synchronization": "http://localhost:5001",
"BitMobile": "http://localhost:5000"
},
Если есть сервис Elasticsearch, заполнить соответствующую секцию данными для доступа.
По аналогии создать и заполнить файл ocelot.json, где для секций BitMobile указать:
"Host": "localhost",
"Port": 5000
для секций Synchronization:
"Host": "localhost",
"Port": 5001
для секций Fiscal:
"Host": "localhost",
"Port": 5002
а также:
"BaseUrl": "http://localhost/grotemserver"
После окончания настроек перезапустить пул "grotem_pool"
Настройка сервера Grotem
В "Диспетчере служб IIS" правым кликом по папке "Сайты" вызвать контекстное меню, в котором выбрать - "Добавить веб-сайт".
В открывшемся окне заполнить параметры:
Имя сайта - bitmobile (пул оставить такой же)
Физический путь - путь до каталога с сервером Grotem, из вышеприведенной структуры - bitmobile3
Подключить как - указать ранее созданного пользователя (в примере - grotem)
Порт – 5000
Для настройки сервера внести изменения в конфигурацию приложения (пункт "Редактор конфигурации")
DataBaseServer - параметры соединения с БД (указать параметры в строке соединения)
для смешанной авторизации на SQL строка подключения будет иметь вид
server=<
адрес_
>;User Id=<username>;Pwd=<password>;Connection Timeout=3600
SQLсервера_
для Windows-авторизации:
server=<
>;Integrated Security=SSPI;Connection Timeout=3600адрес_
SQLсервера_
SolutionsFolder - каталог для создания решений
- BitMobileServerId - ID сервера, в случае необходимости - изменить
- RootPassword - пароль от сервера
Либо эти параметры можно изменить путем редактирования файла Web.config в каталоге сервера bitmobile3.
После окончания настроек, убедитесь, что для пула "bitmobile" установлена версия среды CLR.NET версии 4
а в "дополнительных параметрах" разрешен запуск 32-разрядных приложений и в поле "Удостоверение" указан ранее созданный пользователь с ролью администратора
Перезапустите пул "bitmobile".
Проверка работоспособности сервера и шлюза
На данном этапе можно проверить работоспособность установленных сервисов. Для этого в командной строке нужно перейти в папку с сервером Grotem (bitmobile3), и с помощью утилиты Utils.exe проверить, например, версию сервера. Ответ должен возвращаться и при обращении к серверу Grotem напрямую (на 5000 порт), и через шлюз (при обращении через http://localhost/grotemserver):
utils.exe -ver -host http://localhost/bitmobile -p [пароль]
Настройка сервиса синхронизации
Настройка сервиса синхронизации происходит по аналогии с сервером Grotem.
В "Диспетчере служб IIS" правым кликом по папке "Сайты" вызвать контекстное меню, в котором выбрать - "Добавить веб-сайт". В открывшемся окне заполнить параметры:
Имя сайта - synchronization (пул оставить такой же)
Физический путь - путь до каталога с сервисом синхронизации, из вышеприведенной структуры - synchronization
Подключить как - указать ранее созданного пользователя (в примере - grotem)
Порт – 5001
Далее, перейти в Пулы приложений - synchronization - Основные настройки - Версия среды CLR .NET - Без управляемого кода.
Далее, в проводнике Windows открыть каталог synchronization, в нем найти файл appsettings.example.json и скопировать его под именем appsettings.json. В этом файле заполнить секции:
"Database": {
"Prefix": "BitMobile_1_", // число в префиксе должно совпадать с ID сервера
"Server": "{SQL address}",
"Login": "{SQL user}",
"Password": "{SQL user password}"
},
"Jwt": {
"Issuer": "Identity.API",
"Audience": "http://localhost",
"Expires": "360",
"Key": "{some_big_key_value_here_secret}"
},
Если есть сервис Elasticsearch, заполнить соответствующую секцию данными для доступа.
После окончания настроек перезапустить пул synchronization.
Настройка сервиса фискализации fiscal
Внимание! разворачивание и настройка сервиса fiscal производится только если требуется работа с сервисом фискализации Атол-онлайн.
Настройка сервиса фискализации также производится по аналогии с остальными.
В "Диспетчере служб IIS" правым кликом по папке "Сайты" вызвать контекстное меню, в котором выбрать - "Добавить веб-сайт". В открывшемся окне заполнить параметры:
Имя сайта - fiscal (пул оставить такой же)
Физический путь - путь до каталога с сервисом синхронизации, из вышеприведенной структуры - fiscal
Подключить как - указать ранее созданного пользователя (в примере - grotem)
Порт - 5002
Далее, перейти в Пулы приложений - fiscal- Основные настройки - Версия среды CLR .NET v.4.
Далее, в проводнике Windows открыть каталог fiscal, в нем найти файл appsettings.example.json и скопировать его под именем appsettings.json. В этом файле заполнить секции:
"ConnectionString": "Server={SQL address};Database=FiscalDB;User Id={SQL user};Password={SQL user password};",
"Urls": {
"Atol": "{Atol-online URL}"
},
"Jwt": {
"Issuer": "Identity.API",
"Audience": "http://localhost",
"Expires": "360", // minute
"Key": "{some_big_key_value_here_secret}"
},
Если есть сервис Elasticsearch, заполнить соответствующую секцию данными для доступа.
После окончания настроек перезапустить пул fiscal.
После запуска сервиса fiscal проверить в БД создание базы FiscalDB. Если база не была создана, то выполнить в командной строке команду:
>dotnet C:\\Grotem\ge_package\GrotemServer\fiscal\Fiscal.API.dll
Возможно возникновение ошибок, например, заняты порты 5000 и 5001. В этом случае необходимо выполнить команду с параметрами:
>dotnet C:\\Grotem\ge_package\GrotemServer\fiscal\Fiscal.API.dll --URLs http://localhost:<любой_свободный_порт> //попытка запуска службы на другом порту
или временно переназначить для сервисов "BitMobile" и "Synchronization" порты на другие свободные, выполнить команду и затем вернуть первоначальные настройки.
Разворачивание мобильного решения
В командной строке перейдите в каталог GrotemServer
. Здесь находится утилита Utils.exe
, с помощью которой выполняются все операции с сервером GrotemMobile.
средствами Utils.exe
создать мобильное решение
Utils.exe -sc -host http://localhost/GrotemServer -p <server_password> -sn express
установить пароль решения
Utils.exe -ssp -host http://localhost/GrotemServer -p <server_password> -sn express -sp <solution_password>
загрузить метаданные на основе файла
metadata.xml
из каталогаmetadata
(имя в EN без пробелов)Utils.exe -dm -host http://localhost/GrotemServer -sp <solution_password> -sn express ..\metadata\metadata.xml
загрузить начальные данные
Utils.exe -ud -host http://localhost/GrotemServer -sp <solution_password> -sn express ..\metadata\data.xml
с помощью SQL Management Studio (или другими средствами)
- убедиться, что создана БД мобильного решения (имя БД состоит из
Bitmobile_<префикс_сервера>_<имя_решения>
, напримерBitmobile_1_express
) - к этой БД применить скрипт
SuperServiceDatabaseUpdate.sql
из каталогаmetadata
- В таблицу dbo.dbConfig внести следующие значения:
- в строку, где Key=bitmobileURL - в поле Value вставить URL мобильного решения (вида
https://express.grotem.com/bitmobile3/solution
) - где Key=bitmobileLogin - вставить admin
- где Key=bitmobilePass - вставить пароль от мобильного решения
- в строку, где Key=bitmobileURL - в поле Value вставить URL мобильного решения (вида
- убедиться, что создана БД мобильного решения (имя БД состоит из
Проверка работоспособности мобильного решения
Для проверки работоспособности мобильного устройства нужно открыть в браузере диагностическую страницу.
- проконтролировать доступ к мобильному решению: в браузере перейти по адресу
http(s)://<внешний адрес клиента:порт>/<имя сервера Grotem.Mobile>/<имя решения>/device/ping
, где:<внешний адрес клиента:порт>
- полученные от клиента данные (см. раздел "Заполнение паспорта клиента", пункт 1)<имя сервера Grotem.Mobile>
- имя приложения, под которым был развернут сервер Grotem.Mobile (по умолчанию server)<имя решения>
- в случае успеха в окне браузера должен отобразиться ответ "pong"
- занести параметры мобильного решения в паспорт клиента
- путь подключения
- пароль решения
Настройка прикладного решения
Подключение каталога с прикладным решением к IIS
В оснастке "Internet Information Server (IIS)" ("Панель управления" - "Администрирование") перейти в раздел "Default Web Site".
- в контекстном меню "Default Web Site" выбрать пункт "Добавить виртуальный каталог..."
- в открывшемся окне указать
- в поле "Псевдоним" -
<имя установки>
(см. паспорт клиента) - в поле "Физический путь" - путь до каталога
express
в каталоге с решением (по умолчаниюc:\inetpub\<имя_распакованого_решения>\express
)
- в поле "Псевдоним" -
- проверить настройки при помощи "Тест настроек..."
если наблюдаются ошибки авторизации - укажите учетные данные в разделе "Подкл. как..."
В результате структура сайта в "Диспетчере служб IIS" должна выглядеть следующим образом:
Разворачивание веб-сервисов
- в IIS создать новое Приложение
- в структуре "Диспетчера служб IIS" найти подкаталог
express\service
- в контекстном меню выбрать "Преобразовать в приложение"
- в качестве Application Pool выбрать созданный ранее пул
- проверить настройки соединения
- в случае ошибок авторизации - принудительно установить учетные данные для подключения
- в структуре "Диспетчера служб IIS" найти подкаталог
Также необходимо добавить приложение под именем "services" с настройками аналогичными "service" .
выполнить настройки веб-сервиса:
- перейти в "Редактор конфигураций"
- адрес сервера БД - в параметры
DataAccess:Database:ServerName
иDataAccess:DatabaseRo:ServerName
- имя БД мобильного решения - в
DataAccess:Database:DatabaseName
иDataAccess:DatabaseRo:DatabaseName
- признак использования Windows-аутентификации - в
DataAccess:Database:UseWindowsAuthentification
иDataAccess:DatabaseRo:UseWindowsAuthentification
- логин (если используется встроенная авторизация MSSQL) - в
DataAccess:Database:UserName
иDataAccess:DatabaseRo:DatabaseName
- пароль (если используется встроенная авторизация MSSQL) - в
DataAccess:Database:Password
иDataAccess:DatabaseRo:Password
Проверка работоспособности веб-сервисов
Для проверки работоспособности используется встроенный модуль Swager, автоматически публикуемый по адресу http(s)://<внешний адрес клиента:порт>/<имя прикладного решения>/service/Docs
где:
<внешний адрес клиента:порт>
- полученные от клиента данные (см. раздел "Заполнение паспорта клиента", пункт 1)<имя установки>
- имя установки прикладного приложения (по умолчанию GrotemExpress) (см. соответствующий параметр в паспорте клиента)
На этой странице нужно получить первоначальный токен, введя учетные данные пользователя (по умолчанию Admin | admin).
Отметить в паспорте клиента факт работоспособности веб-сервисов
Разворачивание веб-интерфейса
- в структуре "Диспетчера служб IIS" найти подкаталог
express\service
- в контекстном меню выбрать пункт "Проводник"
- в каталоге admin скопировать файл index.html.template в index.html
в файле index.html заполнить следующие параметры:
%BASE_HREF% - строкой вида
/<имя решения>/admin/
(в 2-х местах)- начальный и конечный "слэши" - обязательны
%BASIC_URL% - адресом подключения в виде
http://<имя решения>[:<порт>]/
- "слэш" в конце строки обязателен
- порт нужно указывать, только если он отличается от стандартных для протоколов http (80) или https (443)
%SERVICE_URL% - строкой вида
/<имя решения>/service/
- начальный и конечный "слэши" - обязательны
%API% - заменить на строку
api/
- %VERSION% - заменить на строку
version
- %HASH_LINK% - заменить на строку
HASH_LINK
- %GOOGLEPLAYURL% - оставить без изменений - это ссылка для скачивания приложения с Google Play
- %ANDROID_URL% - оставить без изменений, либо указать ссылку для скачивания apk-файла для ANDRIOD со страницы входа в веб-интерфейс
В итоге файл должен выглядеть примерно следующим образом (считаем. что параметр <имя решения>
принят за GrotemExpress)
```
...
<head>
<base href='/express/admin/'>
...
<script>
var config = {
"BASE": "/express/admin/",
"BASIC_URL": "http://xx.xx.xx.xx/",
"SERVICE_URL": "/express/service/",
"API": "api/",
"VERSION": "version",
"HASH_LINK": "HASH_LINK",
"ADMIN_SERVICE_DEV": "/"
"GOOGLE_PLAY_URL": "https://play.google.com/store/apps/details?id=com.grotem.express",
"ANDROID_URL": "%ANDROID_URL%"
}
</script>
```
Далее необходимо убедиться в наличии типа MIME. Для этого в оснастке IIS, в корневом разделе, откройте для редактирования типы MIME
В открывшемся списке проверьте наличие и при необходимости добавьте расширение файла ".application" с типом "application/x-ms-application"
Проверка работоспособности веб-интерфейса
Если все модули системы настроены корректно, по при открытии в браузере адреса http(s)://<внешний адрес клиента:порт>/<имя прикладного решения>/admin
должна открыться страница авторизации сервиса.
Если станица не открывается - нужно проверять корректность настроек.
Публикация мобильного приложения
- заказать сборку мобильного приложения. При заказе сборки указать адрес для подключения к мобильному решению
http(s)://<внешний адрес клиента:порт>/<имя сервера Grotem.Mobile>/<имя решения>
- полученные файлы (*.apk) разместить в каталоге
app
(не путать с каталогомadmin/app
)
Настройка автоматических переадресаций
В оснастке IIS перейдите на виртуальный каталог express
и перейдите в модуль "URL Rewrite".
В настройке URL Rewrite
создайте одно пустое правило - оно будет выступать в качестве шаблона. Заполним обязательные поля: "Имя", "Шаблон" и "URL-адрес переопределения значением" значением "Template rule" и нажмем "Применить".
Далее перейдите в каталог, где расположено прикладное решение и отредактируйте находящийся там файл Web.config - раздел <rules>
должен принять следующий вид:
``` ...
<rules>
<rule name="WebAdmin" enabled="true" stopProcessing="true">
<match url="(admin)/.*"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_URI}" matchType="IsDirectory" negate="true" pattern="admin/(api)"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
<add input="{REQUEST_URI}" pattern="admin/(api)" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
</conditions>
<action type="Rewrite" url="{R:1}/"/>
</rule>
<rule name="app to admin" enabled="true" stopProcessing="true">
<match url="([^/]*)app/$"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
</conditions>
<action type="Redirect" url="{R:1}/express/admin/" redirectType="Found"/>
</rule>
<rule name="From Root to login" stopProcessing="true">
<match url="^(\s*)$"/>
<action type="Redirect" url="{R:0}/express/admin/" redirectType="Found"/>
</rule>
</rules>
... ```
Убедиться в работоспособности можно, попытавшись открыть в браузере адрес http(s)://<внешний адрес клиента:порт>/<имя прикладного решения>
. При этом должна произойти автоматическая переадресация на страницу входа.
Завершающие контрольные шаги
- Убедиться, что авторизация в веб-интерфейс происходит успешно (по умолчанию под пользователем Admin | admin)
- Выйти из системы - убедиться, что вернулись на экран авторизации
- Убедиться, что скачивается мобильное приложение
- Повторно войти в систему и сменить пароль для пользователя Admin (в разделе "Сотрудники"). Рекомендуем выйти и повторно войти в систему, чтобы убедиться, что пароль установлен корректно.
Установка лицензий
- Запросить лицензии (адрес https://clients.superagent.ru/getlicense/)
- Активировать лицензии на сервере Grotem.Mobile с помощью
Utils.exe
- Убедиться, что вход в мобильное приложение и первоначальная синхронизация проходят успешно (по умолчанию с пользователем Admin и новым паролем)
Установка сертификата для Push-уведомлений на iOS
Операционная система iOS для отправки Push-уведомлений требует установку специального сертификата.
Файл сертификата PushCert.p12
находится в подкаталоге Certs
каталога metadata
.
Установка сертификата производится при помощи утилиты Utils.exe
, запускаемой с ключом -ucert
(подробности смотрите в справке Utils.exe -h
)
Минимальные требования
- Windows Server 2012
- СУБД - MS SQL Server 2012
- MSSQL Management Studio
- учетная запись на SQL-сервере с ролями
public
иdbcreator
- Web-сервер - IIS версии 8 и выше
- доступ к веб-серверу из-вне по портам 80 (443 или другим, определенным клиентом)
- внешний фиксированный ("белый") IP-адрес (возможно, доменное имя)
Подробнее о требованиях можно прочитать здесь: Требования к серверу для развертывания решения
Особенности установки
Установка на IIS 7.0
При установке веб-сервисов на IIS версий 7.0 требуется внести изменения в настройки приложения для правильной регистрации обработчиков событий.
```
<system.webServer>
<handlers>
<remove name="svc-Integrated-4.0" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="svc-Integrated-4.0" path="*" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" lockItem="false" />
</handlers>
...
</system.webServer>
```