Расширяемость ThingWorx > Расширения > Удаленный доступ > Использование виджета RAClientLinker
Использование виджета RAClientLinker
В ThingWorx Remote Access Extension (RAE) входит виджет RAClientLinker, который можно использовать для создания собственного интерфейса пользователя с помощью ThingWorx Mashup Builder. С помощью этого виджета проще запустить удаленную сессию, запустить клиент и обнаружить, установлен ли клиент в системе пользователя. В этом разделе предполагается, что читатель знаком с Mashup Builder, имеет соответствующую лицензию для приложения и понимает, как его использовать. В центре внимания здесь находится виджет.
Этот раздел содержит следующие подразделы.
Виджет RAClientLinker Widget
Виджеты позволяют создавать мэшапы с предварительно упакованной функциональностью. Виджет RAClientLinker не является исключением. Он обладает свойствами, общими для всех виджетов, а также свойствами, специфичными для создания удаленных сессий с устройствами Edge, находящимися в момент создания в состоянии isReporting. Отметим, что вещи, представляющие устройства Edge, должны применять профиль вещи RemoteAccessible.
Дополнительные сведения об использовании Mashup Builder и виджетов см. в документации по ThingWorx Mashup Builder (на английском языке).
Виджет RAClientLinker работает для всех типов сессий удаленного доступа. Ваша задача - связать свойство RemoteEndpoint виджета с допустимым значением. Обычно это выполняется путем привязки свойства к строке, возвращаемой сервисом GetRemoteAccessibleEndpoints. Этот сервис определен на профиле вещи RemoteAccessProvider.
При разработке мэшапа не требуется вызывать сервис StartSession, если используется виджет RAClientLinker. Просто задайте для виджета свойства ThingName, RemoteEndpoint и ProviderConfig, и они будут переданы в сервис StartSession. Свойство ProviderConfig представляет JSON, отформатированный в соответствии с используемым типом RemoteAccessProvider, для агентов ThingWorxInternalRemoteAccessProvider ThingWorx AlwaysOn, таких как WS EMS, или вещи GASRemoteAccessProvider для агентов Axeda eMessage
Добавление виджета в мэшап
После импорта ThingWorx Remote Access Extension (RAE) в ThingWorx Platform виджет доступен как RemoteAccessClientLinker в представлении интегрированной среды разработки Mashup Builder, как показано ниже:
Оттуда можно перетащить экземпляр виджета в ваш мэшап. Обратите внимание: хотя он отображается в интерфейсе пользователя IDE, в реальном мэшапе во время выполнения нет видимой визуализации этого виджета. Подобно виджету Выражение, в мэшапе будет отображаться следующее:
После его перетаскивания в мэшап можно выбрать его, переместить и перетащить связываемые элементы на виджет, чтобы соединить его свойства и сервисы. То, в каком месте виджет находится в мэшапе, несущественно для его работы.
Выбор вещи и запуск сессии
Чтобы разрешить пользователям выбрать вещь во время выполнения, а затем запустить сессию с помощью виджета, выполните следующие шаги.
1. Добавьте виджет EntityPicker в мэшап, чтобы пользователи могли выбирать вещь во время выполнения.
2. Привяжите содержимое виджета EntityPicker к свойству ThingName в виджете RAClientLinker. В виджете EntityPicker выберите добавление привязки исходящих данных к виджету RAClientLinker. Убедитесь, что вещи, которые будут видимыми для пользователей, реализуют профиль вещи RemoteAccessible. Во время выполнения наименование вещи, которое выбирает пользователь в виджете EntityPicker, передается в виджет RAClientLinker.
3. Затем найдите свойство RemoteEndpoint. Это свойство требуется для запуска сессии и обычно ссылается на приложение на удаленном устройстве, с которого вы пытаетесь запустить сессию. Привязывайте это свойство к значению, полученному из другого виджета. Это значение должно соответствовать значению name конечной точки из сервиса GetRemoteAccessibleEndpoints для вещи.
4. Свойство ProviderConfig виджета представляет дополнительные специфичные для поставщика свойства, которые являются обязательными или используются в RemoteAccessProvider (GAS или ThingWorx Internal) для обеспечения работы сессии. Будет ли это свойство необязательным, зависит от поставщика. Это свойство представлено как большой двоичный объект JSON и должно привязываться в качестве выходных данных из виджета Выражение или аналогичного виджета, который может собрать блок JSON из других входных данных мэшапа.
5. Свойство SessionId доступно для привязки на входе и на выходе и позволяет привязать идентификатор сессии на входе, если сессия уже существует, или на выходе, если виджет запустил сессию ранее. Если идентификатор сессии привязан на входе из другого места, этот идентификатор сессии имеет более высокий приоритет и виджет не пытается начать новую сессию. Этот идентификатор сессии можно использовать для запуска клиента, если сессия уже существует, или для предоставления идентификатора сессии для какой-либо другой цели. Оба случая полезны при применении кода повторного выполнения операции.
6. После задания свойств можно запустить сессию, вызвав сервис LaunchClient:
Сервис LaunchClient выполняет следующие действия:
a. Запускает сессию.
b. Пытается запустить Remote Access Client (RAC).
c. Определяет успешность запуска RAC.
Обработка запуска клиента
Виджет RAClientLinker инициирует ряд событий в составе сервиса LaunchClient:
SessionCreated - инициируется, если сессия запущена, а виджет пытается запустить клиент с созданной сессией.
AwaitingLaunch - инициируется после попытки клиента осуществить запуск.
ClientLaunched - инициируется, если виджет обнаруживает, что клиент успешно запущен. Используйте это событие, чтобы показать, что сессия успешно начата и клиент успешно запущен.
ClientNotInstalled - инициируется, если виджет обнаруживает, что клиент не запущен. Это событие показывает только то, что клиент не подключился обратно к ThingWorx Platform. Сессия была запущена и может быть прервана из-за тайм-аута при отсутствии активности.
Обнаруживает, установлен ли клиент
Виджет RAClientLinker определяет, установлен ли клиент, ожидая от него обратный вызов платформы после запуска. Обнаружив этот обратный вызов, виджет может распознать, что клиент установлен пользователем. Если клиент не выполняет обратный вызов в течение заданного периода тайм-аута, виджет может с высокой вероятность полагать, что у пользователя не установлен клиент или что клиенту не удается соединиться с платформой.
Этот период тайм-аута является настраиваемым на странице конфигурации RemoteAccessSubsystem. Значение по умолчанию: 10 секунд. Перед изменением этого значения следует помнить, что событие ClientNotInstalled не инициируется до тех пор, пока не истечет весь период тайм-аута. Задание слишком большого значения может привести к длительному времени ожидания перед тем, как будет предоставлена обратная связь. Ниже приведена соответствующая часть страницы конфигурации подсистемы:
Сервер (локальный) на стороне пользователя
В рамках подключения к удаленной сессии все доступные реализации удаленного доступа предоставляют сервер, который является локальным для компьютера пользователя. Remote Access Client уведомляет пользователей о доступном локальном порте, к которому они могут присоединять любой клиент приложения, используемый в этой сессии, например SSH или VNC (для рабочей станции). Чтобы запретить доступ к этому серверу извне компьютера пользователя (например, если имеется доступ к IP-адресу компьютера пользователя), сервер на стороне клиента прослушивает только интерфейс замыкания на себя на локальном компьютере. Это означает, что любая попытка соединиться с этим сервером с использованием IP-адреса компьютера не будет работать. Все соединения должны выполняться по адресу замыкания на себя (127.0.0.1).
* 
Туннелирование для устройств ThingWorx Edge не поддерживает протоколы, которые выполняют несколько соединений с Edge и отключение от Edge, например при использовании браузера для доступа к серверу HTTP. Например, триггеры RDP отключаются при использовании неверных учетных данных и при подключении к серверу RDP, который не является доверенным для компьютера. Чтобы действовать максимально эффективно, убедитесь, что вы понимаете поведение соединения и отсоединения для протокола, который вы пытаетесь использовать для перенаправления.
* 
Не используйте localhost вместо IP-адреса 127.0.0.1, поскольку это может привести к неверному разрешению адресов IPv6.