19

既存のシステムをゼロから再実装する必要があります。

ある時点で、ユーザーが特定の Web ページに移動すると、サーバーはユーザーのシリアル ポートからデータを読み取る必要があります。

現在、Web ページには ActiveX コントロールがあります。ページが読み込まれると、ActiveX コントロールは、シリアル ポートからデータを読み取るユーザーの PC 上の COM DLL を呼び出します。

システムは 10 年前のものです。これを実装できる「より良い」方法はありますか?

たとえば、テクノロジーは過去 10 年間で進歩しました。そして、このソリューションは、現在約 26% の市場シェアを持つ MS IE でのみ機能するようです (2013 年にこの質問を最後に更新したとき、それはありました。2107 年 2 月の時点で、MS IE は 3-4% で、Edge は1-2%. Edge も MS 製品であるため、Active X をサポートしている可能性があります (私は試していません. おお、最初から新しいので、おそらくサポートしていない可能性があります)。

HTML 5 は新しい可能性を提供しましたか? Cordovaのような製品はどうですか?

他の可能性はありますか?

ラズベリーパイを追加して、シリアルポート経由で読み取りを行い、ブラウザアプリがRESTfulサービス経由で通信できるようにすることはできますか?


[更新] @ EuroMicelli は、「ネイティブ アプリではなく Web ブラウザーからアプリを実行する十分な理由があると思います」と述べています。元のプロジェクトが計画されたときに私はそこにいなかったのでわかりません(そしてそれを設計した会社は現在消滅しています)。

おそらく、エンド ユーザーがデータベースと直接やり取りすることを望んでいなかったのでしょうか? おそらく「ブラウザベース」は当時の新しいバズワードでしたか?個人的には、デスクトップ アプリに問題はありませんが (実装しやすいため)、ブラウザー ベースのままにすることを検討する必要がありますか? (さらに、私はデスクトップ アプリを自分で処理できます。ボーナスを提供するように導くのは、COM ポートからのブラウザー ベースの読み取りのみです ;-)

4

6 に答える 6

24

確かなことは、ローカル マシンにいくつかの特別なバイナリをインストール (および適切な権限で実行) しないと、ローカル マシンのハードウェアと通信できないことです。ただし、必ずしも ActiveX コンポーネントを使用して Internet Explorer を使い続ける必要があるというわけではありません。もちろん、市場のすべてのブラウザ用のコンポーネントを開発することもできます。

私は別のアプローチを提案します:

  • Windows サービスを作成し (あなたのマシンは Windows を実行していると仮定します)、必要な特権で構成します。とにかく、マシンに何かをインストールする必要があります。サービスは任意の言語で実装できます。
  • それに HTTP(S) サーバー機能を追加します。ここでは、WCF から WebAPI まで、多くのテクノロジを使用できます。
  • HTTP を介した独自の通信プロトコルを発明します。JSON、Ajax、WebSockets、SignalR などを使用できます。
  • 市場に出回っているほとんどのブラウザーと互換性のある Javascript ファイルを作成します。つまり、一度だけ作成するだけで、シリアル COM API になります。Javascript および Ajax 機能 ( XmlHttpRequest ) を備えたすべてのブラウザーを、1 つのコード ベースのみでサポートできます。

これは次のようになります。 ここに画像の説明を入力

于 2013-03-05T14:24:15.583 に答える
11

クライアントマシンでの外部ライブラリまたはプラグインの要件を最小限に抑えるために、Javaアプレットを作成します。

要約 (それを実現するために必要なほとんどのドキュメントへのリンクを含む)

  1. クライアントにJavaがインストールされていることを確認します(ほとんどの場合、Javaがインストールされています。インストールされていない場合は、ブラウザーでインストールできます)(これは、このアプローチで一部のクライアントに必要な唯一のインストールです)
  2. PureJavaCommのように、外部インストールを必要としないJavaシリアルポートライブラリを選択します
  3. シリアルポートの読み取りを行うためのパブリックメソッドを提供する非常に単純なJavaアプレットを作成します
  4. アプレットに署名して、必要なシステムアクセス権限が付与されるようにします
  5. Webページにアプレットを含め、JavaScriptから直接パブリックメソッドを呼び出すだけです。

詳細:

StatOwlによると、すべてのマシンの約3分の2に必要なJavaフレームワークがすでにインストールされているため、クライアントに追加のインフラストラクチャを提供するように依頼する必要さえない場合があります。そして、そうする場合、少なくとも、人々が知っていて、あまり懐疑的ではない、(ほとんどの場合)手入れの行き届いたソフトウェアを求めています。また、ほとんどのブラウザには、Javaフレームワークがない場合に、Javaフレームワークを自動的にインストールするようにユーザーに促す機能が必要です。

シリアルポートにアクセスするためにJavaで使用できるいくつかの異なるライブラリがあります。PureJavaCommは、実行に外部コードを必要としない数少ないものの1つと思われます。具体的には、Windowsでは、WinAPI Javaクラスを使用すると、すでにインストールされているWindowsライブラリへの呼び出しを使用するだけで、すべての設定を含むCOMポートに直接アクセスできます。PureJavaCommはJava専用ライブラリであるため、アプレットと一緒に1つの.jarファイルにパッケージ化できます。このファイルは、ブラウザが自動的にダウンロードするため、インストールする必要はありません。

次に、必要なシリアルポートアクセスを実行するためのパブリックメソッドを定義する最小限のJavaアプレット(おそらく合計で約50〜100行のみ)を記述できます。これは、JavaScriptから直接簡単に呼び出すことができます。JavaScriptコードからのアプレットメソッドの呼び出し

確認する必要があるのは、アプレットに署名し、シリアルポートコードをdoPrivileged(...)呼び出しでラップして、JVMサンドボックス内から必要なシステムアクセスが許可されるようにすることだけです。このために、購入したSSL証明書(サービスがhttpsを使用している場合はすでに持っている可能性があります)を取得するか、独自のSSL証明書を生成することができます。独自に生成した場合、ユーザーはアプレットを信頼するかどうかを確認するメッセージが表示されますが、「常に信頼する」を選択できるため、チェックボックスを1回だけクリックして[OK]をクリックします。しかし、それを超えて、これはユーザーエクスペリエンスへの影響を最小限に抑える完全に透過的なソリューションである必要があります。

代替案1:

もう1つのオプションは、Webインターフェースを完全に廃止し、代わりに、ユーザーがJNLP(Java Web Start)を使用してWebサイトから直接(インストールの有無にかかわらず)簡単に実行できるJavaプログラムを提供することです。

代替案2(Windowsのみの可能性が高い):

Microsoft Silverlightも使用できると思いますが、これもかなり広く展開されているようです。

Silverlight 5とのシリアル通信(COMポート)

Javaアプレットよりも「モダン」だと考える人もいるかもしれませんが、おそらくクロスプラットフォームではありません。

また、JavaScriptからSilverlightコードを呼び出すのは少し複雑に思えますが、それは可能です。

JavaScriptでSilverlightをスクリプト化可能にする

于 2013-03-06T00:57:55.840 に答える
7

別の(「web-of-things」のような)オプションに名前を付けるだけです。外部ハードウェアです。

ユースケースに応じて、arduinoマイクロコントローラーやraspberry-pi組み込みPCなどの外部の低コストデバイスを使用できます。

これらの種類のデバイス上に単純なシリアルからWebサービスへのブリッジを構築することはそれほど難しくありません。このようないくつかのプロジェクトを使用できます。例:https ://code.google.com/p/serwebproxy/

このようなシナリオでは、すべての低レベルのものが外部ハードウェアによって処理され、(get / postを介して)インターフェイスのようなWebサービスによって提供されます。

さらなる利点は、アプリケーションが実行されるPCがシリアルポートを必要としないことです(これは一部のシステムでは非常にまれになります)。

ブラウザアプリケーションから、簡単なajax呼び出しで組み込みデバイス上のWebサービスにクエリを実行できます。ブラウザはプラグインをまったく必要としません。ソリューションはプラットフォームを超えて機能し、汎用的であり、近い将来のブラウザ技術の開発から独立しています。

于 2013-03-11T22:46:40.957 に答える
5

おそらくそうではありません。

ネイティブ アプリではなく Web ブラウザーからアプリを実行する十分な理由があると仮定します。それが正当なビジネス上の決定であることがわかるいくつかのシナリオを考えることができます。

現代のすべての進歩を遂げた今日でも、Web ブラウザーは依然として高度な対話型ドキュメント ビューアーであり、ユニバーサル ランタイム環境ではありません。Websocket のような最先端の機能でさえ、洗練されたクライアント/サーバー通信を可能にするために導入されたものであり、ブラウザーからすべてを実行できるようになるという普遍的な関心のためではありません。

それがネイティブに可能な特殊な環境があるかもしれませんが (Chrome OS はありますか?)、一般的な解決策にはなりません。ブラウザタグまたはスクリプトを介してシリアルポートを開くことを認識している既存または提案された標準はありません。つまり、ActiveX のようなかなり低レベルのプラグイン テクノロジが必要になるということです。ActiveX は、IE のみのサポートで問題ない場合、特にそれが既に作成されていて動作する場合に、非常に優れたソリューションです。

ブラウザからのシリアル ポート アクセスを探しているほとんどの人は、ラボ機器、バーコード スキャナ、科学機器など、指定 (構築/販売?) および制御する独自のハードウェアからデータを取得している可能性があります。必要なブラウザを指定することも完全に受け入れられます。特殊なアプリケーションは、一般的にそれを行います。

より広範なブラウザー サポートを検討したい場合は、この質問に対する提案された解決策を検討してみてください: Communicating with Serial Port using Adob​​e Flash。私はこの製品を使った経験はありませんが、それが機能すれば、単一のコードベースでやりたいことをほとんどのブラウザーで実行できるようになるはずです。

最終的に何をするにしても、何らかの形のサードパーティ製プラグインが必要になることは間違いありません。

于 2013-03-05T05:02:04.273 に答える