Extensibilité de ThingWorx > Extensions > Accès à distance > Utilisation du widget RAClientLinker
Utilisation du widget RAClientLinker
ThingWorx Remote Access Extension (RAE) inclut le widget RAClientLinker qui vous permet de créer votre propre interface utilisateur à l'aide de ThingWorx Mashup Builder. Ce widget facilite le démarrage d'une session à distance en lançant le client et en détectant si le client est installé sur le système de l'utilisateur. Cette rubrique suppose que vous connaissez le Mashup Builder, que vous disposez de la licence appropriée pour l'application et que vous avez appris à l'utiliser. Nous allons nous concentrer ici sur le widget.
Cette rubrique comporte les sections suivantes :
variable RAClientLinker Widget ;
Les widgets vous permettent de créer des applications composites avec une fonctionnalité prédéfinie. Le widget RAClientLinker ne fait pas exception à la règle. Il possède les propriétés communes à tous les widgets, ainsi que les propriétés spécifiques à la création de sessions à distance avec des périphériques Edge qui sont actuellement à l'état isReporting. Notez que les objets qui représentent les périphériques Edge doivent implémenter la forme d'objet RemoteAccessible.
Pour plus d'informations sur l'utilisation du Mashup Builder et des widgets, consultez la documentation relative à ThingWorx Mashup Builder.
Le widget RAClientLinker fonctionne pour tous les types de sessions d'accès à distance. Il vous revient de lier la propriété RemoteEndpoint du widget à une valeur valide. Généralement, cette opération s'effectue en liant la propriété à une ligne renvoyée par le service GetRemoteAccessibleEndpoints sur la forme d'objet RemoteAccessProvider.
Lorsque vous développez une application composite, vous n'avez pas besoin d'appeler le service StartSession si vous utilisez le widget RAClientLinker. Il vous suffit de définir les propriétés ThingName, RemoteEndpoint et ProviderConfig sur le widget et de les transmettre au service StartSession. La propriété ProviderConfig est au format JSON qui est spécifiquement formatée selon le type de la forme d'objet RemoteAccessProvider utilisée, soit l'objet ThingWorxInternalRemoteAccessProvider pour les agents ThingWorx AlwaysOn comme WS EMS ou l'objet GASRemoteAccessProvider pour les agents Axeda eMessage.
Ajout du widget à une application composite
Le fait d'importer ThingWorx Remote Access Extension (RAE) sur ThingWorx Platform rend le widget RemoteAccessClientLinker disponible dans la vue IDE du Mashup Builder, comme illustré ci-dessous :
Vous pouvez ensuite faire glisser une instance du widget vers votre application composite. Notez que bien qu'il s'affiche dans l'interface utilisateur IDE, ce widget n'est pas visible dans l'application composite elle-même au moment de l'exécution. A l'instar du widget Expression, vous obtenez un affichage de ce type dans l'application composite :
Après avoir fait glisser le widget dans l'application composite, vous pouvez le sélectionner, le déplacer et faire glisser des éléments pouvant être liés sur le widget pour connecter ses propriétés et ses services. L'endroit où se trouve le widget dans l'application composite est sans importance pour sa fonction.
Sélection d'un objet et démarrage d'une session
Pour permettre aux utilisateurs de sélectionner un objet au moment de l'exécution, puis démarrer une session à l'aide du widget, procédez comme suit :
1. Ajoutez un widget EntityPickerà l'application composite pour permettre aux utilisateurs de sélectionner un objet lors de l'exécution.
2. Liez le contenu du widget EntityPicker à la propriété ThingName du widget RAClientLinker. Dans le widget EntityPicker, choisissez d'ajouter une liaison de données sortante au widget RAClientLinker. Assurez-vous que les objets qui seront visibles par les utilisateurs implémentent tous la forme d'objet RemoteAccessible. Lors de l'exécution, le nom d'objet sélectionné par l'utilisateur dans le widget EntityPicker est transmis au widget RAClientLinker.
3. Ensuite, localisez la propriété RemoteEndpoint. Cette propriété est requise pour démarrer une session et fait généralement référence à l'application sur le périphérique distant avec lequel vous tentez de démarrer une session. Liez cette propriété à une valeur dérivée d'un autre widget. Cette valeur doit correspondre à la valeur name d'un point de terminaison du service GetRemoteAccessibleEndpoints sur l'objet.
4. La propriété ProviderConfig du widget représente toutes les propriétés supplémentaires spécifiques au fournisseur qui sont requises ou utilisées par RemoteAccessProvider (GAS ou ThingWorx Internal) qui facilite la session. Le fournisseur utilisé détermine si cette propriété sera facultative ou non. Cette propriété est représentée sous la forme d'un objet BLOB JSON et doit être liée en tant que sortie d'un widget Expression ou d'un objet similaire pouvant assembler un bloc JSON à partir d'autres entrées d'application composite.
5. La propriété SessionId peut être liée en entrée et en sortie, ce qui vous permet de lier en entrée l'ID d'une session qui existe déjà ou en sortie si le widget a démarré une session précédemment. Si l'ID de session est lié à partir d'un autre emplacement, cet ID de session est prioritaire et le widget ne tente pas de démarrer une nouvelle session. Vous pouvez utiliser cet ID de session pour lancer le client si une session existe déjà ou pour fournir l'ID de session à un autre élément. Les deux cas sont utiles pour implémenter la logique de nouvelle tentative.
6. Une fois les propriétés définies, vous pouvez lancer la session en appelant le service LaunchClient :
Le service LaunchClient exécute les actions suivantes :
a. Il démarre la session.
b. Il tente de lancer Remote Access Client (RAC).
c. Il détecte si RAC s'exécute correctement.
Gestion de lancement du client
Le widget RAClientLinker déclenche plusieurs événements dans le cadre du service LaunchClient :
SessionCreated : déclenché lorsque la session a démarré et que le widget tente de lancer le client avec la session créée.
AwaitingLaunch : déclenché après la tentative de lancement du client.
ClientLaunched : déclenché si le widget détecte que le client a été lancé avec succès. Utilisez cet événement pour indiquer que la session a bien démarré et que le client a été lancé.
ClientNotInstalled : déclenché si le widget détecte que le client n'a pas été lancé. Cet événement indique uniquement que le client ne s'est pas reconnecté à ThingWorx Platform. La session a été démarrée et peut expirer pour cause d'inactivité.
Détection de l'installation du client
Le widget RAClientLinker détecte si le client est installé en attendant que celui-ci le rappelle sur la plateforme une fois qu'il a été lancé. En détectant ce rappel, le widget peut déterminer que l'utilisateur a installé le client. Si le client n'effectue pas de rappel dans un délai spécifié, le widget peut en déduire que l'utilisateur n'a pas installé le client et que celui-ci ne parvient pas à se connecter à la plateforme.
Ce délai est configurable sur la page de configuration de RemoteAccessSubsystem. La valeur par défaut est de 10 secondes. Avant de modifier cette valeur, n'oubliez pas que l'événement ClientNotInstalled ne se déclenche pas tant que le délai d'inactivité n'a pas expiré. La définition d'une valeur trop importante peut entraîner des temps d'attente trop longs avant l'envoi d'une réponse. Voici la partie de la page de configuration du sous-système qui nous intéresse :
Serveur (local) côté utilisateur
Dans le cadre de la connexion à une session à distance, toutes les implémentations d'accès à distance disponibles fournissent un serveur local à la machine de l'utilisateur. Remote Access Client avertit les utilisateurs de l'existence d'un port local auquel ils peuvent se connecter, quel que soit le client d'application qu'ils utilisent pour cette session, comme SSH ou VNC (bureau). Pour empêcher tout accès au serveur qui ne proviendrait pas de la machine de l'utilisateur (par exemple, en disposant de son adresse IP), le serveur côté client écoute uniquement l'interface de bouclage de la machine locale. Cela signifie que toute tentative de connexion à ce serveur à l'aide de l'adresse IP de la machine ne fonctionnera pas. Toutes les connexions doivent être établies avec une adresse de boucle (127.0.0.1).
* 
La tunnelisation de ThingWorx Edge ne prend pas en charge les protocoles qui effectuent plusieurs connexions et déconnexions sur l'Edge, comme l'utilisation d'un navigateur pour accéder à un serveur HTTP. Par exemple, les déclencheurs RDP se déconnectent lorsque vous utilisez des informations d'identification incorrectes et lorsque vous vous connectez à un serveur RDP qui n'est pas approuvé par votre ordinateur. Pour être plus efficace, assurez-vous de bien comprendre le comportement de connexion et de déconnexion du protocole que vous tentez de transmettre.
* 
N'utilisez pas localhost à la place de l'adresse IP 127.0.0.1, car elle peut correspondre à une adresse IPv6 qui ne fonctionnera pas correctement.