ThingWorx の拡張性 > 拡張機能 > リモートアクセス > RAClientLinker ウィジェットの使用
RAClientLinker ウィジェットの使用
ThingWorx Remote Access Extension (RAE) には、ThingWorx Mashup Builder を使用して独自のユーザーインタフェースを構築するために使用できる「RAClientLinker」ウィジェットが含まれています。このウィジェットを使用すると、簡単にリモートセッションを開始したり、クライアントを起動したりできるほか、ユーザーのシステムにクライアントがインストールされているかどうかを検出することもできます。このトピックは、ユーザーが Mashup Builder についてよく理解しており、アプリケーションに対する適切なライセンスを保有し、その使用方法をすでに学習していることを前提としています。ここでは、このウィジェットに重点を置いて説明します。
このトピックは、以下のセクションで構成されています。
The RAClientLinker Widget
ウィジェットにより、事前にパッケージ化されている機能を使用してマッシュアップを作成できます。「RAClientLinker」ウィジェットもその 1 つです。これには、すべてのウィジェットに共通のプロパティと、現在 isReporting 状態の Edge デバイスとのリモートセッションを作成することのみを目的としたプロパティがあります。Edge デバイスを表す Thing によって RemoteAccessible Thing Shape が実装されなければならないことに注意してください。
Mashup Builder の使用とウィジェットの詳細については、 「ThingWorx Mashup Builder のドキュメンテーション」を参照してください。
「RAClientLinker」ウィジェットは、すべてのタイプのリモートアクセスセッションに使用できます。このウィジェットの RemoteEndpoint プロパティを有効な値にリンクするかどうかはユーザーが決定します。通常、これを行うには、このプロパティを GetRemoteAccessibleEndpoints サービスによって返される行にバインドします。このサービスは RemoteAccessProvider Thing Shape にあります。
マッシュアップを開発する際、「RAClientLinker」ウィジェットを使用するときに StartSession サービスを呼び出す必要はありません。ウィジェットで ThingNameRemoteEndpoint、および ProviderConfig プロパティを設定するだけで、これらは StartSession サービスに渡されます。ProviderConfig プロパティは、使用されている RemoteAccessProvider のタイプにフォーマットされている JSON です (WS EMS などの ThingWorx AlwaysOn エージェント用の ThingWorxInternalRemoteAccessProvider Thing または Axeda eMessage エージェント用の GASRemoteAccessProvider Thing のどちらか)。
マッシュアップへのウィジェットの追加
ウィジェットは、以下に示すように、ThingWorx Remote Access Extension (RAE) を ThingWorx Platform にインポートすることにより、Mashup Builder の IDE ビューで「RemoteAccessClientLinker」として使用可能になります。
ここから、ウィジェットのインスタンスをマッシュアップにドラッグできます。これは IDE UI に表示されますが、このウィジェットはランタイムの実際のマッシュアップでは視覚的にレンダリングされません。「定義式」ウィジェットと同様に、マッシュアップには以下が表示されます。
これをマッシュアップにドラッグした後、それを選択したり移動したりできるほか、バインド可能な要素をウィジェットにドラッグしてそのプロパティとサービスを接続することもできます。ウィジェットがマッシュアップ内のどこにあるかは、この機能と無関係です。
Thing の選択とセッションの開始
ユーザーがランタイムで Thing を選択し、ウィジェットを介してセッションを開始できるようにするには、次の手順に従います。
1. 「EntityPicker」ウィジェットをマッシュアップに追加して、ユーザーがランタイムで Thing を選択できるようにします。
2. 「EntityPicker」ウィジェットのコンテンツを「RAClientLinker」ウィジェットの ThingName プロパティにバインドします。「EntityPicker」ウィジェットで、送信データバインドを選択して「RAClientLinker」ウィジェットに追加します。ユーザーに表示されるすべての Thing が RemoteAccessible Thing Shape を実装していることを確認してください。ランタイムで、ユーザーが「EntityPicker」ウィジェットで選択した Thing 名が「RAClientLinker」ウィジェットに渡されます。
3. 次に、RemoteEndpoint プロパティを見つけます。このプロパティは、セッションを開始するために必要で、一般的にはセッションの開始を試みるリモートデバイス上のアプリケーションを指します。このプロパティを別のウィジェットから派生した値にバインドします。この値は、Thing 上の GetRemoteAccessibleEndpoints サービスからのエンドポイントの name 値と一致していなければなりません。
4. このウィジェットの ProviderConfig プロパティは、セッションの実行を容易にする RemoteAccessProvider (GAS または ThingWorx Internal) によって必要とされる、あるいは使用される、プロバイダ固有のプロパティを表します。このプロパティがオプションであるかどうかは、プロバイダによって異なります。このプロパティは、JSON BLOB として表され、「定義式」ウィジェット、またはほかのマッシュアップ入力から JSON ブロックをアセンブリできる同様のウィジェットからの出力としてバインドされなければなりません。
5. SessionId プロパティは入力としても出力としてもバインド可能であるため、すでに存在するセッションの ID を入力としてバインドしたり、ウィジェットが以前にセッションを開始している場合は出力としてバインドしたりできます。セッション ID が別の場所から入力としてバインドされている場合、このセッション ID が優先され、このウィジェットは新規セッションを開始しません。セッションがすでに存在する場合、このセッション ID を使用してクライアントを起動できます。また、このセッション ID を別の場所に提供することもできます。どちらの場合も、再試行ロジックの実装に役立ちます。
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 のトンネリングでは、ブラウザを使用して HTTP サーバーにアクセスするなど、Edge との間で複数の接続および切断を行うプロトコルはサポートされていません。たとえば、正しくない資格証明を使用したり、コンピュータで信頼されていない RDP サーバーに接続したりすると、RDP は切断をトリガーします。これに最も効果的に対応するには、転送しようとしているプロトコルの接続と切断の動作を理解しておくことが重要です。
* 
IP アドレス 127.0.0.1 の代わりに localhost を使用しないでください。これは正しく動作しない IPv6 アドレスに解決される可能性があります。