Мое первое приложение под Android: Посредник.
Итак, продолжаем наш опус про написание Android приложения для работы со сканером Zebra RFD8500 (см.часть #1). Прежде всего, разворачиваем и настраиваем Web сервер в DMZ. Основное его предназначение: аппаратная фильтрация нежелательного трафика и перенаправление валидных запросов во внутреннюю сеть. С данными задачами прекрасно справляется програмно-аппаратный комплекс, скажем, на Cisco, Vyatta, Huawei (здесь есть множество вариантов, даже вариант некоего подобия php-proxy). Цель всех этих манипуляций — перенаправить HTTP запросы с мобильного устройства на IIS сервере в локальной сети. Если это удалось — замечатально. Думаю, нет смысла останавливаться на настройках сервера DMZ, ибо ничего сложного в этом нет.
Основной функционал транспорта расположен на IIS сервере.
- Устанавливаем на WIndows сервере IIS
- Устанавливаем Web Platform Installer с сайта Microsoft
- Скачиваем, устанавливаем и настраиваем .Net Core 3.1 с сайта Microsoft
- Скачиваем, устанавливаем и настраиваем Url Rewrite с сайта Microsoft
- Скачиваем, устанавливаем и настраиваем Application Request Routing с сайта Microsoft
- Скачиваем, устанавливаем и настраиваем Web Deploy с сайта Microsoft
Суть всех этих работ заключается в том, чтобы создать обработчик URL, который должен иметь следующий вид: https://server.name/profile/controller/connection_point/method/param1/param2
Как это должно работать:
- Устройство обращается к серверу DMZ
- Сервер DMZ определяет профиль подключения и перенаправляет запрос на внутренний сервер, определенный в настройках профиля
- Сервер IIS при получении запроса определяет контроллер и точку подключения (определенный сервер SQL, Axapta или Socket Сервер), методы которого будут вызываться
- Вызывыется метод с параметрами, определенными в JSON теле POST запроса.
- Результат сериализуется в JSON и отдается клиенту
ПРИМЕР:
Запрос: https://dataserver.com:8888/customers/sql/dataserver/procedure
{
"header": {
"dataSourceType": 5,
"deviceID": "610f033ce3699f54",
"id": "dbc38690-b144-4b0e-88ab-4068ef8aa91c",
"token": "157f1de9-6453-4570-9254-c9465c728b09"
},
"body": {
"procedure": "getStock",
"params": [
{"name": "@param1", "direction": 1, "value": "string value", "dataType": 1},
{"name": "@param2", "direction": 1, "value": 144, "dataType": 2},
{"name": "@param3", "direction": 1, "value": 0, "dataType": 3},
{"name": "@paramOut", "direction": 2, "value": "", "dataType": 101}
]
}
}
Указанный URL подразумевает, что на сервере [CUSTOMERS], контроллер SQL в точке подключения [DATASERVER] будет выполнять хранимую процедуру MSSQL (определена в теле POST запроса как getStock).
Параметры хранимой процедуры определяются, также, в JSON теле POST запроса.
- NAME — имя параметра хранимой процедуры
- DIRECTION — тип параметра (входящий / исходящий / результат
- VALUE — значение
- DATATYPE — тип (значения как в ADO.NET)
{
"header": {
"dataSourceType": 5,
"deviceID": "610f033ce3699f54",
"id": "dbc38690-b144-4b0e-88ab-4068ef8aa91c",
"token": "157f1de9-6453-4570-9254-c9465c728b09"
},
"body": {
"procedure": "getStock",
"params": [
{"name": "@param1", "direction": 1, "value": "string value", "dataType": 1},
{"name": "@param2", "direction": 1, "value": 144, "dataType": 2},
{"name": "@param3", "direction": 1, "value": 0, "dataType": 3},
{"name": "@paramOut", "direction": 2, "value": "", "dataType": 101}
]
}
}