小さなアプリ(Win / Mac / Linでうまく動作するため、TCL / TKオリジナルですが、モノラルが成長してからC#/。NETになりました)を作成することで、類似の問題(シリアルポートに接続されたチケットプリンター)を解決しました。
- ユーザー/パスワードを取得します
- Webリクエストでセッションを作成します。
- ブラウザを開き、
- URLのセッショントークンをアンカーとして指定する(http [s]://foo.bar/baz?x = y#sessiontoken)
このように、それは有線で送信されることはありませんが、クライアントのJSコードで利用できます。
ヘルパーアプリがブラウザーを起動した後、長いポーリングとセッショントークン(ブラウザーとヘルパーアプリに認識されている)を使用してWebサーバーと通信します。クライアント側のアプリとして、周辺機器と非常に自然に通信できます。
このように印刷された数千のチケットの数百...
編集:
はい、私はこれがますます長くなることを知っています、しかし私は詳しく説明する必要があります(そして頼まれました)。
ActiveX / Silverlight /その他のルートを避けたい場合は、4人のプレーヤーが必要です。
- Webサーバー
- ブラウザ
- ヘルパーアプリケーション(「エージェント」)
- デバイス(チケットプリンター、バーコードスキャナーなど)
あなたの基本的な問題は、1。は4.と話す必要があるが、できないということです。したがって、2つの並列パスを選択します。ユーザー向けの通信はサーバーとブラウザー間で交換され、デバイス向けの通信はサーバーとエージェント間で交換され、後者はデバイスに中継します(もちろんその逆)。
エージェントは非常に単純なアプリケーションであり、OS機能を介してデバイスと通信し(もちろん、これがどのように行われるかはデバイスによって異なります)、HTTP要求を介してWebサーバーと通信します。
必要な情報の流れの方向に応じて、次のようになります。
- デバイスからサーバーへの情報の流れを容易にするには、デバイス上のアクティビティでWebリクエストをトリガーするだけです。(入力デバイス、例:バーコードスキャナー)
- サーバーからデバイスへの情報の流れを容易にするために、長いポーリングを使用します。(出力デバイス、例:チケットプリンター)
- 両方向については、両方を実行します(サーバートリガー入力デバイス、カメラなど)
残りの問題は、ブラウザでの人間のアクションをデバイスのアクションと関連付ける方法です。つまり、サーバーは、ブラウザで選択したチケットを、次に長いポーリングを行うプリンタではなく、チケットプリンタに送信する方法を教えてください。
これを解決するには、セッションIDを使用するのが自然な方法ですが、ブラウザとエージェントの両方が同じセッションIDを知っている必要があります。これを実現するには、一方から他方に通信する必要があります。ブラウザからエージェントに通信することはできないため(またはこの議論は議論の余地があります)、逆に通信する必要があります。URLのアンカーは、これを実現するための手段です。次のことを行います。
- ユーザーは(ブラウザーではなく)エージェントを起動し、資格情報を入力します
- エージェント呼び出しは、サーバーへのログインのWeb要求を送信し、セッショントークンを取得します(基本的な暗号化を使用するか、HTTPSを使用してください)
- 次に、エージェントはブラウザを起動します(たとえば、を実行して
cmd.exe /c start "http[s]://domain.tld/start.aspx?x=y#sessiontoken"
)
- セッショントークンはアンカーであるため、ネットワーク経由では送信されませんが、ブラウザ側のコードで使用できます...ビンゴ!
- これで、2つの並列パスが開きます。セッショントークンを認識している人間の要求用のブラウザと、エージェントが上記のモードに移行します。