ThingWorx 扩展性 > 扩展 > 远程访问 > 使用 RAClientLinker 小组件
使用 RAClientLinker 小组件
ThingWorx Remote Access Extension (RAE) 包括 RAClientLinker 小组件,可供您使用 ThingWorx Mashup Builder 构建您自己的用户界面。该小组件可用于启动远程会话、启动客户端以及检测客户端是否安装在用户系统中。本主题假定您熟悉 Mashup Builder,具有相关的应用程序许可证,并且您已经学习了如何使用该应用程序。此处的重点在于小组件。
本主题包含以下章节:
RAClientLinker Widget
小组件能够让您创建具有预装功能的混搭。RAClientLinker 小组件也不例外。它具有所有小组件共有的属性,并且专门用于创建与当前处于 isReporting 状态的 Edge 设备之间的远程会话。请注意,表示 Edge 设备的事物必须实现 RemoteAccessible 事物形态。
有关使用 Mashup Builder 和小组件的具体信息,请参阅 ThingWorx Mashup Builder 文档
RAClientLinker 小组件适用于所有类型的远程访问会话。将小组件的 RemoteEndpoint 属性链接到有效的值由您来完成。通常,您可以通过将属性绑定到 GetRemoteAccessibleEndpoints 服务所返回的行来执行此操作。此服务位于 RemoteAccessProvider 事物形态中。
开发混搭时,使用 RAClientLinker 小组件无需调用 StartSession 服务。只需在小组件上设置 ThingNameRemoteEndpointProviderConfig 属性,这些参数将被传递至 StartSession 服务。ProviderConfig 属性是专门格式化为所使用的 RemoteAccessProvider 类型的 JSON,即适用于 ThingWorx AlwaysOn 代理程序的 ThingWorxInternalRemoteAccessProvider 事物 (如 WS EMS),或适用于 Axeda eMessage 代理程序的 GASRemoteAccessProvider 事物。
将小组件添加到混搭
通过将 ThingWorx Remote Access Extension (RAE) 导入到 ThingWorx Platform 中,小组件即可作为 RemoteAccessClientLinker 显示在 Mashup Builder 的 IDE 视图中,如下所示:
在此处,您可以将小组件的实例拖动到混搭中。请注意,尽管该小组件会出现在 IDE UI 中,但在运行时的实际混搭中不会显示该小组件。与“表达式”小组件类似,您将在混搭中看到以下内容:
将小组件拖动到混搭中后,您可以对其进行选择、移动,也可以将可绑定元素拖动到该小组件上以连接其属性和服务。其中,小组件在混搭中的位置与其功能无关。
选择一个事物并启动会话
要使得用户能够在运行时选择事物,然后通过小组件启动会话,请执行以下步骤:
1. EntityPicker 小组件添加到混搭中,以允许用户在运行时选择事物。
2. EntityPicker 小组件的内容绑定到 RAClientLinker 小组件上的 ThingName 属性。在 EntityPicker 小组件上选择以将出站数据绑定添加到 RAClientLinker 小组件。请确保对用户可见的所有事物均实现 RemoteAccessible 事物形态。在运行时,用户在 EntityPicker 小组件中选择的事物名称将传递到 RAClientLinker 小组件。
3. 接下来,找到 RemoteEndpoint 属性。此属性是启动会话所必需的,通常指向您要与其启动会话的远程设备上的应用程序。请将此属性绑定到另一个小组件衍生的值。该值必须与事物上的 GetRemoteAccessibleEndpoints 服务的端点的 name 值相匹配。
4. 小组件的 ProviderConfig 属性表示提供会话的 RemoteAccessProvider (GASThingWorx Internal、) 所需的或使用的任何其他特定于提供者的属性。此属性是否可选取决于提供者。此属性由 JSON blob 表示,应将其绑定为“表达式”小组件的输出,或绑定至其他可以将混搭输入编制为 JSON 块的类似输出。
5. SessionId 属性是可绑定的,可以向内绑定已存在的会话的 ID,或向外绑定小组件先前启动的会话的 ID。如果会话 ID 从其他位置向内绑定,则此会话 ID 具有优先级,并且小组件不会尝试启动新会话。如果会话已存在,则可以使用此会话 ID 启动客户端,或将会话 ID 提供给其他实体。两种情况在实现重试逻辑时都很有用。
6. 设置完属性后,您可以通过调用 LaunchClient 服务来启动会话:
LaunchClient 服务可执行以下操作:
a. 启动会话。
b. 尝试启动 Remote Access Client (RAC)
c. 检测 RAC 是否已成功启动。
处理客户端启动
作为 LaunchClient 服务的一部分,RAClientLinker 小组件将触发多个事件:
SessionCreated - 当会话已启动且小组件将要尝试使用已创建的会话来启动客户端时,触发此事件。
AwaitingLaunch - 在客户端已尝试启动后,触发此事件。
ClientLaunched - 如果小组件检测到客户端已成功启动,则触发此事件。使用此事件指示会话已成功启动,且客户端已成功启动。
ClientNotInstalled - 如果小组件检测到客户端启动,则触发此事件。此事件仅指示客户端未连接回 ThingWorx Platform。会话已启动,可能因不活动而超时。
检测客户端是否已安装
RAClientLinker 小组件通过在客户端启动后等待其“回调”平台,以检测客户端是否已安装。通过检测此回调,小组件可以确定用户是否已安装了客户端。如果客户端 在所配置的超时时间段内回调,则可以合理地确认用户未安装客户端或客户端连接到平台时遇到问题。
此超时时间段可在 RemoteAccessSubsystem 配置页面中进行配置。默认值为 10 秒。更改此值前须注意,在整个超时时间段到期之前,ClientNotInstalled 事件不会触发。如果值设置得过高,则可能会导致收到反馈的等待时间较长。以下是子系统“配置”页面的相关部分:
用户端 (本地) 服务器
作为远程会话连接的一部分,所有可用的远程访问实现都提供了位于用户计算机的本地服务器。Remote Access Client 会将此本地端口通知给用户,而用户无论针对会话使用了哪一应用程序客户端都可以连接至该本地端口,例如 SSH 或 VNC (桌面)。为防止任何人从该用户计算机以外的其他位置访问此服务器 (例如,如果有人访问此用户计算机的 IP 地址),客户端服务器仅监听本地计算机的环回接口。这意味着任何使用计算机 IP 连接到该服务器的尝试都不会成功。所有连接都必须通过环回地址 (127.0.0.1) 建立。
* 
ThingWorx Edge 隧道不支持可建立多个连接的协议,且不支持从 Edge 断开,例如使用浏览器访问 HTTP 服务器。例如,当您使用了错误的凭据或连接到您的计算机不信任的 RDP 服务器时,RDP 触发器会断开连接。要使其最有效,请确保已了解正在尝试转到的协议的连接和断开行为。
* 
请勿使用 localhost 来代替 IP 地址 127.0.0.1,原因在于它可能会解析无法正常工作的 IPv6 地址。