Utilizzo del widget RAClientLinker
ThingWorx Remote Access Extension (RAE) include il widget RAClientLinker, che è possibile utilizzare per creare un'interfaccia utente personalizzata mediante ThingWorx Mashup Builder. Questo widget facilita l'avvio di una sessione remota e del client e il rilevamento dell'installazione del client nel sistema dell'utente. In questo argomento si presuppone che l'utente abbia familiarità con Mashup Builder, disponga della licenza appropriata per l'applicazione e ne conosca l'utilizzo. Di seguito viene presentato il widget.
Questo argomento contiene le sezioni riportate di seguito.
RAClientLinker Widget.
I widget consentono di creare mashup con funzionalità predefinite. Il widget RAClientLinker non fa eccezione. Dispone di proprietà comuni a tutti i widget e di proprietà specifiche per la creazione di sessioni remote con dispositivi edge con stato isReporting. Tenere presente che gli oggetti che rappresentano i dispositivi edge devono implementare la thing shape RemoteAccessible.
Il widget RAClientLinker è utilizzabile per tutti i tipi di sessioni di accesso remoto. È necessario tuttavia collegare la proprietà RemoteEndpoint del widget a un valore valido. In genere questa operazione viene eseguita associando la proprietà a una riga restituita dal servizio GetRemoteAccessibleEndpoints sulla thing shape RemoteAccessProvider.
Quando si sviluppa un mashup, non è necessario chiamare il servizio StartSession se si utilizza il widget RAClientLinker. È sufficiente impostare le proprietà ThingName, RemoteEndpoint e ProviderConfig nel widget perché vengano trasmesse al servizio StartSession. ProviderConfig è una proprietà JSON formattata in modo specifico per il tipo di RemoteAccessProvider utilizzato, ovvero l'oggetto ThingWorxInternalRemoteAccessProvider per gli agenti ThingWorx AlwaysOn, ad esempio WS EMS, o l'oggetto GASRemoteAccessProviderper gli agenti eMessage Axeda
Aggiunta del widget a un mashup
Importando ThingWorx Remote Access Extension (RAE) in ThingWorx Platform, il widget è disponibile come RemoteAccessClientLinker nella vista IDE di Mashup Builder, come illustrato di seguito:
Da questa posizione è possibile trascinare un'istanza del widget nel mashup. Sebbene venga visualizzato nell'interfaccia utente IDE, non vi è alcun rendering visibile del widget nel mashup effettivo in fase di esecuzione. Analogamente a un widget Espressione, nel mashup viene visualizzato quanto segue:
Dopo averla trascinata nel mashup, è possibile selezionarla, spostarla e trascinare gli elementi associabili sul widget per connettere proprietà e servizi relativi. La posizione in cui il widget si trova nel mashup è irrilevante per la funzione.
Selezione di un oggetto e avvio di una sessione
Per consentire agli utenti di selezionare un oggetto in fase di esecuzione e quindi avviare una sessione tramite il widget, attenersi alla procedura descritta di seguito.
1. Aggiungere un widget EntityPicker al mashup per consentire agli utenti di selezionare un oggetto in fase di esecuzione.
2. Associare il contenuto del widget EntityPicker alla proprietà ThingName nel widget RAClientLinker. Nel widget EntityPicker effettuare la selezione per aggiungere un'associazione dati in uscita al widget RAClientLinker. Assicurarsi che tutti gli oggetti che saranno visibili agli utenti implementino la thing shape RemoteAccessible. In fase di esecuzione il nome dell'oggetto selezionato dall'utente nel widget EntityPicker viene trasmesso al widget RAClientLinker.
3. Individuare quindi la proprietà RemoteEndpoint. Questa proprietà è necessaria per avviare una sessione e fa in genere riferimento all'applicazione nel dispositivo remoto con cui si sta tentando di avviare una sessione. Associare la proprietà a un valore derivato da un altro widget. Il valore deve coincidere con il valore name di un endpoint del servizio GetRemoteAccessibleEndpoints sull'oggetto.
4. La proprietà ProviderConfig del widget rappresenta tutte le proprietà aggiuntive specifiche del provider che sono necessarie o che vengono utilizzate dal RemoteAccessProvider (GAS o ThingWorx Internal) che facilita la sessione. Il fatto che questa proprietà sia facoltativa dipende dal provider. La proprietà è rappresentata come blob JSON e deve essere associata come output di un widget Espressione o qualcosa di analogo che possa assemblare un blocco JSON da altri input del mashup.
5. La proprietà SessionId è associabile all'interno o all'esterno, consentendo l'associazione interna dell'ID di una sessione già esistente o un'associazione esterna se il widget ha avviato una sessione in precedenza. Se l'ID di sessione è associato dall'esterno, questo ID di sessione ha la precedenza e il widget non tenta di avviare una nuova sessione. È possibile utilizzare questo ID di sessione per avviare il client qualora esista già una sessione o per fornire l'ID di sessione a qualcos'altro. Entrambi i casi sono utili per l'implementazione della logica di ripetizione.
6. Una volta impostate le proprietà, è possibile avviare la sessione tramite una chiamata al servizio LaunchClient.
Il servizio LaunchClient esegue le azioni indicate di seguito.
a. Avvia la sessione.
b. Tenta di avviare Remote Access Client (RAC).
c. Rileva se RAC viene avviato correttamente.
Gestione dell'avvio del client
Il widget RAClientLinker attiva diversi eventi come parte del servizio LaunchClient:
• SessionCreated - Attivato all'avvio della sessione e quando il widget sta per tentare di avviare il client con la sessione creata.
• AwaitingLaunch - Attivato dopo il tentativo di avvio del client.
• ClientLaunched - Attivato se il widget rileva che il client sia stato avviato correttamente. Utilizzare questo evento per indicare che la sessione e il client sono stati avviati.
• ClientNotInstalled - Attivato se il widget rileva che il client non sia stato avviato. Questo evento indica solo che il client non si è connesso nuovamente a ThingWorx Platform. La sessione è stata avviata e potrebbe scadere per inattività.
Rilevamento dell'installazione del client
Il widget RAClientLinker rileva l'installazione del client attendendone il callback alla piattaforma dopo l'avvio. Tramite il rilevamento del callback, il widget può identificare l'effettiva installazione del client da parte dell'utente. Se il callback del client non si verifica entro un periodo di timeout configurato, il widget può essere ragionevolmente sicuro che l'utente non ha un client installato o che il client sta avendo problemi di connessione alla piattaforma.
Il periodo di timeout è configurabile nella pagina di configurazione di RemoteAccessSubsystem. Il valore di default è 10 secondi. Prima di modificare questo valore, tenere presente che l'evento ClientNotInstalled non viene attivato fino a quando non è trascorso l'intero periodo di timeout. L'impostazione di un valore troppo elevato può causare tempi di attesa lunghi per il feedback. L'illustrazione seguente mostra l'apposita sezione della pagina di configurazione del sottosistema:
Server lato utente (locale)
Nell'ambito della connessione a una sessione remota, tutte le implementazioni di accesso remoto disponibili forniscono un server locale rispetto al computer dell'utente. Il client di accesso remoto invia una notifica agli utenti di una porta locale disponibile a cui possono connettere qualsiasi client di applicazione utilizzato per la sessione, ad esempio SSH o VNC (desktop). Per impedire a chiunque di accedere al server dall'esterno del computer dell'utente (ad esempio, a chi ha accesso all'indirizzo IP del computer dell'utente), il server lato client resta in ascolto solo sull'interfaccia di loopback del computer locale. Ciò significa che qualsiasi tentativo di connessione al server utilizzando l'IP del computer non funziona. Tutte le connessioni devono essere eseguite a un indirizzo di loopback (127.0.0.1).
| Il tunneling edge ThingWorx non supporta i protocolli che effettuano connessioni e disconnessioni multiple dall'edge, ad esempio utilizzando un browser per accedere a un server HTTP. Ad esempio, i trigger RDP si disconnettono quando si utilizzano le credenziali errate e quando si effettua la connessione a un server RDP non attendibile per il computer. Per maggiore efficacia, assicurarsi di comprendere il comportamento di connessione e disconnessione del protocollo che si sta tentando di inoltrare. |
| Non utilizzare localhost al posto dell'indirizzo IP, 127.0.0.1 perché potrebbe essere risolto in un indirizzo IPv6 che non funzionerebbe correttamente. |