IEでwebアプリケーションを公開するには


ユウキ  2008-01-17 14:06:44  No: 144298  IP: 192.*.*.*

VB2005でのお仕事を初めていただき、プログラムを行ったのですが、
この実行プログラムをWEB上で扱うにはどのようにすればよろしいでしょうか?
なにぶん初めてのことばかりなもので、申し訳ありませんがご教授よろしくお願いします。

環境は VB2005Pro SQLServer2005になります。

編集 削除
魔界の仮面弁士  2008-01-17 14:52:44  No: 144299  IP: 192.*.*.*

そちらの状況が読み取れないので、「やった事」と「やりたい事」を、
具体的に記述してもらえると助かります。

> この実行プログラムをWEB上で扱うにはどのようにすればよろしいでしょうか?
文中にある「この実行プログラム」とは、どのような物なのでしょうか?
また、「WEB上で扱う」とは、どういった処理を想定しておられますか?


たとえば——
  SQL Server とやりとりするコンソールアプリを作ったのだけれど、それを
  社内の Webサイトで公開して、社員がダウンロード利用できるようにしたい
——とか、
  DB 上のデータをグラフとして描くような Windows アプリを作ったのだけれど、
  それを携帯電話から Web で見たいので、ASP.NET で再実装したい
——とか。

編集 削除
ユウキ  2008-01-17 15:19:13  No: 144300  IP: 192.*.*.*

失礼しました。WEBアプリでの経験がないもので、足りないところがいろいろあるようです。

まず、現在作成したものはWindowsアプリでの作成になります。
内容としましては、
>SQL Server とやりとりするコンソールアプリを作ったのだけれど、それを
>社内の Webサイトで公開して、社員がダウンロード利用できるようにしたい
と近いもので、Fromで入力したデータをSQLServerにアップデートまたは逆に
Form上にSQLServerで登録されているデータを出力するというものです。
なお、別画面のFormで登録されたデータの一覧表示とCSVへの出力も行います。

やりたいこととしましては、作成したWindowsアプリのFormを社内のサイトで
公開(IEで閲覧)し、IEのブラウザ上でデータの入出力を行えるようにしたいと考えています。

編集 削除
魔界の仮面弁士  2008-01-17 16:52:02  No: 144301  IP: 192.*.*.*

(案1) Winアプリを ClickOnce で配置して利用する。
  利点: プログラムの修正が一切不要。
  欠点: 各PCは、SQL Server に接続できるようになっている必要がある。

(案2) 画面構成も含めて、すべて ASP.NET プロジェクトとして書き換える。
  利点: クライアントに .NET Framework や SQL Server 接続設定が不要。
  欠点: 既存の Win アプリケーションは、ほぼすべて作り直しになる。

(案3) データ操作部を Web サービス化し、それをWinアプリから利用する形にする。
  利点: 既存アプリの画面部分には手を加える必要が無い。
      クライアントに、SQL Server の接続設定も不要。
  欠点: データ操作部と画面操作部を分離させた設計にする必要がある。

編集 削除
ユウキ  2008-01-17 17:17:15  No: 144302  IP: 192.*.*.*

早速のお答えありがとうございます。

案1に関して、SQLServerへの接続の際のパスワード等は接続文字列として設定しておりますし、パスワード認証以外には特に制限も設けていませんので問題ないかと思います。

案2に関して、画面の作り直しの他、内部のコードには、Winアプリの記述を流用(コピーまたはコピー後簡単な手直し)できるでしょうか?

案3に関して、設計を分離させるとは具体的にどのようなことでしょうか?


先ほどお伝えし忘れておりましたが、前提条件として、

1.各クライアントに対しEXEの配布等を行わず、指定URLへの接続のみ行えばサービスが受けられること。

2.サービス開始後はプログラムの修正を行うことはない。

ということです。

編集 削除
魔界の仮面弁士  2008-01-17 18:26:11  No: 144303  IP: 192.*.*.*

HTML ベースのアプリケーションと、Windows Form ベースのアプリケーションでは、
使用できるコントロールも、画面遷移の方法なども全く異なりますので、
もし、ASP.NET の Web アプリに完全移行するのであれば、基本的には完全に作り直しになります。


> 1.各クライアントに対しEXEの配布等を行わず、指定URLへの接続のみ行えばサービスが受けられること。
案2 に関しては、EXE の配布は発生しません。
また、案1 の場合は「アプリケーションはオンラインでのみ利用できる」のオプションを利用する事ができます。

案3 に関しては、案1と案2の中間です。Web サービス化しておいた exe を
案1 の方法で配布するなら、クライアントへのインストールは不要です。


> 2.サービス開始後はプログラムの修正を行うことはない。
それは、「バグや機能修正要望があっても修正できない」という意味でしょうか?
それとも「バグや機能修正要望があっても修正しない」という意味でしょうか?


> 案1に関して、SQLServerへの接続の際のパスワード等は接続文字列として設定しておりますし、
SQL Server 認証でしょうか。パスワードの埋め込みはセキュリティ的に脆弱になるので、
可能であれば Windows 認証を採用する事を検討された方が良いかと思います。
http://www.sqlpassj.org/bunkakai/security/series/kihon/01.aspx


> 案2に関して、画面の作り直しの他、内部のコードには、Winアプリの記述を流用
そちらの「内部のコード」を知らないので判断に困りますが、たとえば
Sytem.Data 名前空間の機能は、どちらも差異ありません。
しかし、System.Windows.Forms 関連の機能は一切使えなくなります。
(たとえば、MessageBox なども使えません)

また、クライアント上のリソース(ファイル、レジストリ、プリンタ等)へのアクセスが
行えない(または強く制限される)という違いもあります。


> 案3に関して、設計を分離させるとは具体的にどのようなことでしょうか?
どう説明すれば良いのか分かりませんが、いわゆる『3階層』のシステムのように設計する、ということです。

案3 の場合、Form アプリは SQL Server には一切アクセスできなくなります。
しかし Web サービスは、SQL Server と通信する事ができます(画面とDBの中継役です)。


画面側からデータを表示する場合には、Web サービスに「○○のデータを下さい」と指示し、
データを更新する場合には、その編集結果を Web サービスに伝え、DB に反映してもらいます。


たとえば、12月の売上を画面に表示し、それを編集するアプリを作るとします。

Web サービス側のイメージコードは、たとえばこんな感じ。
データ操作には TableAdapter を使っていると思ってください。

  <WebMethod()> _
  Public Function GetMonthly(ByVal year As Integer, ByVal month As Integer) As TestServer.SalesDataSet
    '指定した年月の売上情報を返す
    Dim ds As New TestServer.SalesDataSet()
    Using ta As New SalesDataSetTableAdapters.Table1TableAdapter
      ta.FillByMonth(ds.Table1, year, month)
    End Using
    Return ds
  End Function

  <WebMethod()> _
  Public Sub Update(ByVal ds As TestServer.SalesDataSet)
    '編集結果の DataSet を受け取り、それを DB に反映させる
    Using ta As New SalesDataSetTableAdapters.Table1TableAdapter
      ta.Update(ds)
    End Using
  End Sub


画面側のイメージコードでいうと、たとえばこんな感じ。

  Private ds As TestServer.SalesDataSet
  Private Sub Button1_Click(…
    '12月分の売上情報を取得し、一覧表として表示する。
    Using web As New TestServer.SalesService()
      ds = web.GetMonthly(2007, 12)
    End Using
    DataGridView1.DataSource = ds.Table1
  End Sub

  Private Sub Button2_Click(…
    'ユーザが編集した結果を、サーバに返送する。
    Using web As New TestServer.SalesService()
      web.Update(ds)
    End Using
  End Sub


Web サービス実装の方法などは、下記を参照。
http://www.microsoft.com/japan/msdn/thisweek/300x10/
http://www.microsoft.com/japan/msdn/thisweek/wednesday/

編集 削除
ユウキ  2008-01-18 09:00:20  No: 144304  IP: 192.*.*.*

ありがとうございます。

検討の結果、案2の方法で再作成しようと思います。
WEBアプリからのDBの接続やDataGridViewの使用方法など、
わからないことが山積みですが、調べながら頑張りたいと思います。

未熟故に、またご質問させていただくことと思いますが、
どうぞよろしくお願い致します。

編集 削除