none
Webサービスを使うメリットについて RRS feed

  • 質問

  • いつもお世話になっております。
    C#2005でWebアプリケーションを作成しています。

    前任者から引き継いだシステムがありまして、
    そのシステムではWebサービスを使って、
    データベースからデータの取得をしています。
    (クライアント:WinXp、サーバー:Windows Server 2003、SQL Server 2005)

    データベースからデータの取得をするだけなら、
    Webサービスを使う必要はないのでは?
    と思っているのですが、なぜWebサービスを使っているのかが分かりません。

    前任者は結構プログラムには詳しい人でしたので、
    何か理由があったからWebサービスにしているのだろうと思っています。
    (ドキュメントは全然残してくれない人だったのですが。。。)

    クライアントは25台程度あります。
    同時に同じデータ取得の処理が実行されるケースが多々あり、
    その処理には30秒程度時間がかかります。

    データ取得の処理はすべてWebサービスを利用しています。

    どうしてWebサービスを使っていると考えられるのでしょうか?
    既に前任者がいない状態で、この部分に関するドキュメントが残っていませんでした。

    私なりに原因を考えてみたのですが、
    どうしても分かりませんでした。
    (Webアプリの開発経験に乏しいので、気付かないのだと思うのですが。。。)

    もしよろしければ、考えられる理由を教えて頂けませんか?
    ぜひよろしくお願いいたします。

    2009年7月10日 13:24

回答

  • 一言でWebアプリといってもいろいろあります。クライアントがWinXpとのことですが、Webブラウザを使いHTML+CSS+JavaScriptだけで動作するクライアントでしょうか?
    その場合、Webブラウザのセキュリティーポリシーとしてデーターベースに直接接続することはできません。必然的にWebサービスなどを使わざるを得なくなるでしょう。

    それとは別に、システムはレイヤーごとに分けるべきで、データーベースはWebのことを意識すべきではなく、逆にWebはデーターベースのことを意識しない方が設計しやすいでしょう。
    レイヤーを分ける際にWebサービスはいい手段です。
    • 回答としてマーク コンドル 2009年7月13日 4:55
    2009年7月12日 0:23
  • 私がWebサービスにする理由として思い付くのは、Ajaxなどでクライアントから呼び出したい、Windowsアプリケーションからも利用したいといったWebアプリケーション以外からの利用を想定した場合と、データベースやデータベースのテーブルの構造が変わっても柔軟に対応できる、概念的にエンティティを提供できる※1といったSQL Serverを隠蔽する目的として使用する場合です。
    今だとADO.NET Data ServicesやADO.NET Entity Frameworkがありますが、基本的な目的は上記と変わらないと思います。

    #エンティティそのものを提供できるわけではなく、アプリケーションから見ればテーブル構造などデータベースを全く意識する必要がなく、したがってテーブルのリンクなど考えなくても全ての欲しい値が手に入ることを言っています。これはストアドプロシージャを呼べばとにかく欲しい値が全て手に入ることと似ていますので、このようにすればSQL Serverに直接接続する場合でも、この部分だけに注目すれば同じです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク コンドル 2009年7月13日 4:55
    2009年7月12日 1:31
    モデレータ

すべての返信

  • Webアプリケーションは本を見ながらサンプルを少し作って動かした程度の経験しかないのでよくはわかりませんが、
    なんとなく感じたことは「SQL Server に直接接続させたくない」のかな?ということです。

    どうして直接接続させたくないのかもよくわかりませんが
    なんとなくな推測では「セキュリティ」の関係でしょうか?

    ユーザの権限を適切に設定することでリスクはずいぶん減ると思いますので
    見当外れかもしれませんが。
    2009年7月10日 22:55
  • SweetSmile様

    ご回答ありがとうございます。

    「セキュリティ」ですか。
    WebアプリケーションとしてSQLを実行させると、
    ユーザー側のログイン者の権限でSQLが実行されるのでしょうか?
    Webサービスならサーバー側のログイン者でSQLが実行されるということですか?
    権限の部分に詳しくないので、私の認識であっているか、ご回答頂けませんか?
    調査してみます。


    それから、私なりに考えてみたのですが、
    SQL Server側に同時接続数の問題があったりするのでしょうか???
    (SQL ServerはSQL Server2005 Express Editionでした。。。)
    Webサービスなら同時接続数を気にしなくて良い、とかってないですよね。。。
    (結局どちらも場合もSQL Serverに接続していますもんね。。。)

    まだ継続的に調査を進めるつもりですので、
    もしよろしければ、ご回答お願い致します。

    必要な情報などありましたら、なるべく回答しますので、
    ぜひご質問ください。

    以上、よろしくお願い致します。
    2009年7月11日 17:21
  • 一言でWebアプリといってもいろいろあります。クライアントがWinXpとのことですが、Webブラウザを使いHTML+CSS+JavaScriptだけで動作するクライアントでしょうか?
    その場合、Webブラウザのセキュリティーポリシーとしてデーターベースに直接接続することはできません。必然的にWebサービスなどを使わざるを得なくなるでしょう。

    それとは別に、システムはレイヤーごとに分けるべきで、データーベースはWebのことを意識すべきではなく、逆にWebはデーターベースのことを意識しない方が設計しやすいでしょう。
    レイヤーを分ける際にWebサービスはいい手段です。
    • 回答としてマーク コンドル 2009年7月13日 4:55
    2009年7月12日 0:23
  • 私がWebサービスにする理由として思い付くのは、Ajaxなどでクライアントから呼び出したい、Windowsアプリケーションからも利用したいといったWebアプリケーション以外からの利用を想定した場合と、データベースやデータベースのテーブルの構造が変わっても柔軟に対応できる、概念的にエンティティを提供できる※1といったSQL Serverを隠蔽する目的として使用する場合です。
    今だとADO.NET Data ServicesやADO.NET Entity Frameworkがありますが、基本的な目的は上記と変わらないと思います。

    #エンティティそのものを提供できるわけではなく、アプリケーションから見ればテーブル構造などデータベースを全く意識する必要がなく、したがってテーブルのリンクなど考えなくても全ての欲しい値が手に入ることを言っています。これはストアドプロシージャを呼べばとにかく欲しい値が全て手に入ることと似ていますので、このようにすればSQL Serverに直接接続する場合でも、この部分だけに注目すれば同じです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク コンドル 2009年7月13日 4:55
    2009年7月12日 1:31
    モデレータ
  • 佐祐理様

    ご回答ありがとうございます。

    一言でWebアプリといってもいろいろあります。クライアントがWinXpとのことですが、Webブラウザを使いHTML+CSS+JavaScriptだけで動作するクライアントでしょうか?

    そうだと思います。
    HTMLとCSSとJavaScriptしか使っていません。
    C#2005のASP.NETで開発しています。
    [ファイル]⇒[新規作成]⇒[Webサイト]⇒[ASP.NET Webサイト]で作成されるやつです。

    その場合、Webブラウザのセキュリティーポリシーとしてデーターベースに直接接続することはできません。必然的にWebサービスなどを使わざるを得なくなるでしょう。

    そうだったのですか。
    少しだけ理解できたと思うのですが、私の理解が間違っているではないかと思うため、
    確認させてください。

    たとえば「Default.aspx.cs」の「Page_Load」でデータベースに接続して、
    操作することができますよね?
    これは「Default.aspx.cs」がサーバー側で動作しているので、
    データベースに接続できているということですか?

    それで、JavaScriptを使いクライアント側で処理をしている場合は、
    クライアントからサーバー側のデータベースに直接接続できないと言われているのでしょうか?
    この場合に、Webサービスであれば呼ぶことができるため、Webサービスを使用しているということでしょうか?

    それとは別に、システムはレイヤーごとに分けるべきで、データーベースはWebのことを意識すべきではなく、逆にWebはデーターベースのことを意識しない方が設計しやすいでしょう。
    レイヤーを分ける際にWebサービスはいい手段です。

    3層クライアントサーバーシステムの構成にするのであれば、
    データベース層の処理を分けるべきだということですよね?
    そうですね、とても勉強になりました。


    もしよろしければ、ご回答お願いいたします。
    よろしくお願いいたします。
     

    2009年7月13日 4:48
  • trapemiya様

    ご回答ありがとうございます。

    私がWebサービスにする理由として思い付くのは、Ajaxなどでクライアントから呼び出したい、Windowsアプリケーションからも利用したいといったWebアプリケーション以外からの利用を想定した場合と、・・・

    Ajaxなどというのには、JavaScriptも含まれていますよね。
    佐祐理様のご回答からも読み取ったのですが、このような場合にデータベースに接続できないのですね。
    勉強になりました。


    ・・・データベースやデータベースのテーブルの構造が変わっても柔軟に対応できる、概念的にエンティティを提供できる※1といったSQL Serverを隠蔽する目的として使用する場合です。
    今だとADO.NET Data ServicesやADO.NET Entity Frameworkがありますが、基本的な目的は上記と変わらないと思います。

    #エンティティそのものを提供できるわけではなく、アプリケーションから見ればテーブル構造などデータベースを全く意識する必要がなく、したがってテーブルのリンクなど考えなくても全ての欲しい値が手に入ることを言っています。これはストアドプロシージャを呼べばとにかく欲しい値が全て手に入ることと似ていますので、このようにすればSQL Serverに直接接続する場合でも、この部分だけに注目すれば同じです。

    このような場面でも利用できるのですね。
    確かにそうですね。
    プログラムを直さないため、テストの際に影響が限られていきますもんね。
    とても勉強になりました。



    今回のケースから考えるとJavaScriptを使っており、
    クライアント側での処理の際に、データベースに接続しているように思われます。
    そのためWebサービスを利用しているのですね。

    とても参考になりました。
    ありがとうございました。
    2009年7月13日 4:54
  • たとえば「Default.aspx.cs」の「Page_Load」でデータベースに接続して、
    操作することができますよね?
    これは「Default.aspx.cs」がサーバー側で動作しているので、
    データベースに接続できているということですか?

    それで、JavaScriptを使いクライアント側で処理をしている場合は、
    クライアントからサーバー側のデータベースに直接接続できないと言われているのでしょうか?
    この場合に、Webサービスであれば呼ぶことができるため、Webサービスを使用しているということでしょうか?

    どちらもそうです。

    3層クライアントサーバーシステムの構成にするのであれば、
    データベース層の処理を分けるべきだということですよね?

    3層でなくても例えば2層であっても、データーベース層はプレゼンテーション層とは切り離されるべきでしょうね。その手段がWebサービスとは限りませんが。
    2009年7月20日 0:36