- PR -

[VS.NET2005][VB.NET]インターネットを介してのDB接続について

投稿者投稿内容
GodSpeed
会議室デビュー日: 2004/02/09
投稿数: 9
投稿日時: 2007-02-01 22:30
現在、XML Web サービスを用いたスマートクライアントを実現しようとしています。
とここで、1つ疑問が出てきました。

VB.NETにて作成したWindowsアプリケーション(exe)から
インターネットを介して(ファイアウォールも通過して)のDB接続(RDBMSの種類は問いません)
というものは可能なのでしょうか?
(DB接続処理は、Windowsアプリケーションに実装するとします)


もし上記のようなことが可能であるとのことであれば
XML Web サービスを採用する理由があるのか疑問になります。
(しいて言うなら、セキュリティ周りが絡むのかな?)
また、XML Web サービスの変わりにRESTというやり方もあることは、存じ上げており
.NET Remotingはファイアウォールが越えられないようなので考慮対象外としてます。

くだらない質問かと思いますが、ご存知の方
どんな情報でも構いませんので、ご教授願えないでしょうか。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-02-01 22:51
引用:

VB.NETにて作成したWindowsアプリケーション(exe)から
インターネットを介して(ファイアウォールも通過して)のDB接続(RDBMSの種類は問いません)
というものは可能なのでしょうか?



不可能ではありません。

引用:

(しいて言うなら、セキュリティ周りが絡むのかな?)



とかとかです。
何が「良い」かは時と場合によって異なります。

引用:

.NET Remotingはファイアウォールが越えられないようなので考慮対象外としてます。



HttpChannel を使えば越えられます。
GodSpeed
会議室デビュー日: 2004/02/09
投稿数: 9
投稿日時: 2007-02-02 09:30
ご返答ありがとうございます。

Windowsアプリケーションから外部DBに接続することは可能なんですね。
そうした場合の処理イメージは、次のようなものになるという認識で問題ないでしょうか。

<DBサーバ側の対応>
・DBサーバのRDBMSが通信するポートを開いておく
・ファイアウォールで遮断されないように、Windowsアプリケーションからの
 アクセスを許可する(通信ポートは80以外でも可能?)
・外部からDBサーバにアクセス可能とするために、DBサーバには
 グローバルIPアドレスを付与する

<Windowsアプリケーション側の対応>
・通常のRDBMS接続(.NETの場合、ADO.NETなど)処理を実装
 (リソースの場所をDBサーバのグローバルIPアドレス、DBが待ち受けている
  ポートを指定)
・接続が確立されたら、ローカルネットワークあるいはLAN上にあるDBとの
 対話処理と変わらない

このように考えるとWindowsアプリケーション側での実装は
ローカルだろうが、LAN上だろうが外部だろうがリソース場所のみが変わるだけ
というイメージになってしまいますが、根本的に処理や考え方が足りないものは
あるのでしょうか。

>>HttpChannel を使えば越えられます。
なるほど、HttpChannel を使えば越えられるのですね〜
大変、勉強になりました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-02-02 10:02
引用:

そうした場合の処理イメージは、次のようなものになるという認識で問題ないでしょうか。



そういう直接的な接続ではありません。

出来る DBMS もあるかもしれませんが、少なくとも SQL Server の場合は間に IIS が入ったはずです。
GodSpeed
会議室デビュー日: 2004/02/09
投稿数: 9
投稿日時: 2007-02-02 11:19
引用:

そういう直接的な接続ではありません。

出来る DBMS もあるかもしれませんが、少なくとも SQL Server の場合は間に IIS が入ったはずです。



直接的な接続処理の実装では実現できないということなんですね。
SQL Server 2005の場合、リモート接続機能で構築すれば
直接的な接続処理の実装で行けるのかと思っていましたが
そうではないようですね。。。
(自分で試して確認できる環境がないのが何とも。。。)

Windowsアプリケーション側の接続処理が直接的ではない場合
どのような実装を行うのか、恥ずかしながら現時点では想像がつきません。
このあたりに関して、引き続き調査してみようと思います。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2007-02-02 11:24
DB処理を行うクライアントにもコンポーネントが必要なデータベース製品であっても、
サーバー側でDB処理をした結果をクライアントに渡すようにすれば、
エンドユーザーのクライアントにはコンポーネントをインストールする必要がなくなります。

クライアントの環境に依存しにくくなるといったメリットもあるのではないでしょうか。

GodSpeed
会議室デビュー日: 2004/02/09
投稿数: 9
投稿日時: 2007-02-02 11:30
引用:

クライアントの環境に依存しにくくなるといったメリットもあるのではないでしょうか。



なるほど。おっしゃる通り、XML Web サービスを利用するメリットは
ここにもありそうですね。

どうやらXML Web サービスを用いたスマートクライアントで実現するという手段は
決定事項になりそうです。
ただ、個人的にそれを用いなかった場合、他にどのようなやり方があり
どのようなインパクトがあるのかは把握しておきたいと思いまして。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-02-02 11:34
引用:

GodSpeedさんの書き込み (2007-02-02 09:30) より:
<DBサーバ側の対応>
・DBサーバのRDBMSが通信するポートを開いておく
・ファイアウォールで遮断されないように、Windowsアプリケーションからの
 アクセスを許可する(通信ポートは80以外でも可能?)
・外部からDBサーバにアクセス可能とするために、DBサーバには
 グローバルIPアドレスを付与する

<Windowsアプリケーション側の対応>
・通常のRDBMS接続(.NETの場合、ADO.NETなど)処理を実装
 (リソースの場所をDBサーバのグローバルIPアドレス、DBが待ち受けている
  ポートを指定)
・接続が確立されたら、ローカルネットワークあるいはLAN上にあるDBとの
 対話処理と変わらない


まぁ、その通りではあるのだけど・・・

引用:

このように考えるとWindowsアプリケーション側での実装は
ローカルだろうが、LAN上だろうが外部だろうがリソース場所のみが変わるだけ
というイメージになってしまいますが、根本的に処理や考え方が足りないものは
あるのでしょうか。


後はパフォーマンスの問題。

WANの場合には物理的に距離があるぶん、同じ大域幅でもpingの応答に数百msかかる事が珍しくないよね。この状況で操作のたびに同期的に通信を行うようなプロトコルを使うと著しくパフォーマンスが低下する。例えば1000レコードのデータを取り出す処理がLANなら3秒で終わっていたのが、WANだと毎回数百msのディレイが入って3分かかったりする。WANでも間にWeb Seriviceを介在させて、データを纏めて一気に転送すればもっと短い時間でデータを送信できる。

「LANで開発した業務ソフトをWANに持って行ったら使い物にならなくて・・・」と言う記事を何年も前に他所のサイトで見かけたよ。

もちろん使用するDBにもよるだろうけど、WANでの利用を前提にプロトコルを最適化しているデータベースなんて聞いた事ないよ。

スキルアップ/キャリアアップ(JOB@IT)