none
シリアル通信 RRS feed

  • 質問

  • ASP.NETにて、シリアル通信にて機器へコマンドを送信して、機器から送られてくるデータを受信しております。

     シリアル通信の流れは、CreateFileにてCOMポートを開き、WriteFileにてコマンドを送信し、ReadFileにてデータを受信しております。

     開発パソコンがASPサーバーで、クライアントも同一パソコンにて動作確認をしておりましたので、大きな勘違いをしておりました。

     勘違いとは開発パソコンのUSBポートに機器を接続し、上記のシリアル通信を実行しておりました。それでクライアントの環境においても、正常に動作していると思っておりましたが、現在のプログラムでは、サーバーに接続した機器へシリアル通信するプログラムとなっており、クライアントパソコンへ接続した機器へシリアル通信は行なえていない事に気付きました。

     ASP.NETにて、クライアントのCOMポートを開き、コマンド送信及び受信する事は可能なのでしょうか?当方の開発環境はFrameWork1.1です。VBにて開発しております。

     アドバイスの方、よろしくお願い致します。

    2006年6月19日 8:11

回答

  • > こんな環境をASP.NETで出来ないのでしょうか?

    クライアントとなるマシンのセキュリティ設定等をいじれるのであればできないことはないと思います。
    ただ、その場合ASP.NETでつくるというより、ASP.NETからActiveX等を呼び出して使う、という形になるでしょう。

    > 確か国土交通省のコアシステムはJAVAを使っておりました。

    電子入札のシステムだったらセキュリティいじってましたよね、たしか。
    あと、ブラウザのバージョンに制限があるとかいろいろクライアント側に課す制限ありませんでしたっけ?
    そういった限定条件のもとでならつくれると思います。

     

    2006年6月20日 1:23
  • サーバー側の資源を直接参照できないとは、
    C:とか、D:\temp\work1.txtとか
    そういった参照ができないという意味です。
    厳密にいうと、ネットワーク接続したクライアント側のドライブ
    (サーバの何とかドライブとネットワーク接続している)X:とかは利用できます。
    あくまで、クライアント上のドライブとして扱われる資源しか参照できません。
    ただし、このやり方も、
    セキュリティと運用のからみで問題がいろいろあり、
    お勧めはしませんが。
    (例えば、クライアントにログインしているユーザーで、ネットワーク接続できるか
    等)

    電子入札コアシステムの例はわかりませんが、
    ActiveXを利用する場合、
    上記ネットワークドライブでサーバ資源を利用するか
    サーバ上にCOM+等で作成したアプリケーションを動作させて
    それと通信するかその他の方法(私は思いつきませんがあるかもしれません)
    により、
    サーバ上の資源を利用します。

    2006年6月20日 3:15

すべての返信

  • > ASP.NETにて、クライアントのCOMポートを開き、コマンド送信及び受信する事は可能なのでしょうか?

    ブラウザ経由でこんなことが簡単にできたらセキュリティ的に問題あると思いませんか?
    絶対できないとは思いませんが、やるためにはクライアント側のセキュリティレベルを下げたり、必要なコンポーネントをインストールしたり、と、いろいろな条件が前提になると思います。

     

    2006年6月19日 8:48
  • うーん、どっとねっとふぁんさんのコメントも付いていることですし、こういう回答していいかどうか迷いますが…。

    超強引に行くならば、Terminal Service使えばクライアントのCOMポートがリダイレクトされます。「リモートデスクトップ接続」の「ローカルリソース」というタブです。ここで「シリアルポート」にチェックを入れておけば、サーバ側で禁止されていない限り、クライアントのCOMポートに接続された機器ががあたかもサーバにあるように動きます。

    ただ、これは「できるよ」ということだけで、それがシステムに本当によいことなのかどうかまでは責任を持てません。

    2006年6月19日 16:10
  • どっとねっとふぁん様 KKamegawa様

    早速、ご回答頂き有難う御座います。

    やはり簡単には出来ないようですね。

    イメージ的には電子入札のコアシステムによく似てるのですが、クライアント側に接続されたICカードリーダーにて、ICカードの固有番号を読み取り、その番号をサーバーへ送信する。

    こんな環境をASP.NETで出来ないのでしょうか?

    確か国土交通省のコアシステムはJAVAを使っておりました。

    2006年6月19日 22:47
  • > こんな環境をASP.NETで出来ないのでしょうか?

    クライアントとなるマシンのセキュリティ設定等をいじれるのであればできないことはないと思います。
    ただ、その場合ASP.NETでつくるというより、ASP.NETからActiveX等を呼び出して使う、という形になるでしょう。

    > 確か国土交通省のコアシステムはJAVAを使っておりました。

    電子入札のシステムだったらセキュリティいじってましたよね、たしか。
    あと、ブラウザのバージョンに制限があるとかいろいろクライアント側に課す制限ありませんでしたっけ?
    そういった限定条件のもとでならつくれると思います。

     

    2006年6月20日 1:23
  • どっとねっとふぁん様

    いつも大変お世話になっております。

    従来のASP.NETによる開発(ActiveX等の利用を検討)とWindowsアプリケーションによる開発(Windowsアプリケーションにてクライアント側機器と通信、通信結果をデータベースサーバーへ送信する)と両方で検討したいと思います。

    出来れば、ASP.NET環境で進めたいです。有力な情報が御座いましたら、アドバイスをお願い致します。

    2006年6月20日 2:03
  • よくある勘違いですよね。(困ったことに)

    残念ながら、ASP.NETからはどうあがいてもクライアントの資源は参照できません

    セキュリティの問題は、他の方が列挙されていますのであえて述べませんが、

    VBScriptで、OpenしてCOMポートを参照できます。
    (IEのセキュリティ設定を低くする必要がありますし、
    これをすると、VBScriptから、format c:もできてしまいそうなので
    どうかな?とは思いますが)

     また、ActiveXを作成して呼び出す方法もあります。

    (ただし、今度は、サーバ側の資源を直接参照することはできません。

    COM+とかを使うとできなくはないですが。)

     

    2006年6月20日 2:08
  • Walkure様

    >ただし、今度は、サーバ側の資源を直接参照することはできません。

    ActiveXからサーバー側の資源を参照できないと言う事でしょうか?

    ActiveXを利用したら、電子入札コアシステムの例ですと、ActiveXでクライアント側ICカードリーダーにてICカードの固有番号を読み取り、WebフォームのTextboxへ表示させる程度の事はできるのでしょうか?

    よろしくお願い致します。

    2006年6月20日 2:15
  • サーバー側の資源を直接参照できないとは、
    C:とか、D:\temp\work1.txtとか
    そういった参照ができないという意味です。
    厳密にいうと、ネットワーク接続したクライアント側のドライブ
    (サーバの何とかドライブとネットワーク接続している)X:とかは利用できます。
    あくまで、クライアント上のドライブとして扱われる資源しか参照できません。
    ただし、このやり方も、
    セキュリティと運用のからみで問題がいろいろあり、
    お勧めはしませんが。
    (例えば、クライアントにログインしているユーザーで、ネットワーク接続できるか
    等)

    電子入札コアシステムの例はわかりませんが、
    ActiveXを利用する場合、
    上記ネットワークドライブでサーバ資源を利用するか
    サーバ上にCOM+等で作成したアプリケーションを動作させて
    それと通信するかその他の方法(私は思いつきませんがあるかもしれません)
    により、
    サーバ上の資源を利用します。

    2006年6月20日 3:15