Мое первое приложение под Android: Посредник.

Итак, продолжаем наш опус про написание Android приложения для работы со сканером Zebra RFD8500 (см.часть #1). Прежде всего, разворачиваем и настраиваем Web сервер в DMZ. Основное его предназначение: аппаратная фильтрация нежелательного трафика и перенаправление валидных запросов во внутреннюю сеть. С данными задачами прекрасно справляется програмно-аппаратный комплекс, скажем, на Cisco, Vyatta, Huawei (здесь есть множество вариантов, даже вариант некоего подобия php-proxy). Цель всех этих манипуляций — перенаправить HTTP запросы с мобильного устройства на IIS сервере в локальной сети. Если это удалось — замечатально. Думаю, нет смысла останавливаться на настройках сервера DMZ, ибо ничего сложного в этом нет.

Основной функционал транспорта расположен на IIS сервере.

  1. Устанавливаем на WIndows сервере IIS
  2. Устанавливаем Web Platform Installer с сайта Microsoft
  3. Скачиваем, устанавливаем и настраиваем .Net Core 3.1 с сайта Microsoft
  4. Скачиваем, устанавливаем и настраиваем Url Rewrite с сайта Microsoft
  5. Скачиваем, устанавливаем и настраиваем Application Request Routing с сайта Microsoft
  6. Скачиваем, устанавливаем и настраиваем Web Deploy с сайта Microsoft

Суть всех этих работ заключается в том, чтобы создать обработчик URL, который должен иметь следующий вид: https://server.name/profile/controller/connection_point/method/param1/param2

Как это должно работать:

  1. Устройство обращается к серверу DMZ
  2. Сервер DMZ определяет профиль подключения и перенаправляет запрос на внутренний сервер, определенный в настройках профиля
  3. Сервер IIS при получении запроса определяет контроллер и точку подключения (определенный сервер SQL, Axapta или Socket Сервер), методы которого будут вызываться
  4. Вызывыется метод с параметрами, определенными в JSON теле POST запроса.
  5. Результат сериализуется в 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}
        ]
    }
}