Web Matrixで始めるWebアプリ・プログラミング

第3回 Web MatrixでWebアプリケーションを開発しよう

山田 祥寛
2004/02/25

Page1 Page2 Page3 Page4

XML Webサービスの活用

 昨今、「Webサービス」という言葉が頻繁に取りざたされているが、概念的には「Webサービス」は新しい技術ではない。要は、分散したアプリケーション間で情報をやりとりし、相互に連携するためのしくみである。DCOMCORBAのようなアーキテクチャは、まさに「Webサービス」の先駆けだろう。

 しかし、これらのアーキテクチャは独自の伝達方式を採用していたことから、一般的なファイアウォールを越えて通信を行う場合に、多くの制約を受けてきた。つまり、インターネット上における不特定多数のユーザーに対するサービスの提供には、事実上、DCOMやCORBAのようなアーキテクチャは利用できなかったことを意味する。

 そこで登場したのが「Webサービス」、あるいは「XML Webサービス」だ。「XML Webサービス」は、XMLという業界標準のフォーマットとHTTPのような標準プロトコルを採用したことで、DCOMやCORBAのような既存技術が抱えていた問題を解消した。

 Webサービスを利用することで、例えば、サイト内で管理されているデータベースの検索用インターフェイスのみを公開し、外部のアプリケーションからこれを利用することが可能になる。「Webサービス」の世界では、サービスの提供者が「検索画面」のようなユーザー・インターフェイスをわざわざ構築する必要もないし、また、結果をXMLデータとして取得することができるため、利用者にとってはデータの加工が容易であるという利点がある(HTMLで提供された検索画面では、必要なデータを自分のシステムに取り込むにも、いちいち人間が転記などを行う必要がある)。

 さてここでは、ごく基本的な「Webサービス」をASP.NET+Web Matrixで構築してみることにしよう。ASP.NET+Web Matrixの組み合わせを用いることで、あたかもローカルなプロシージャ(関数)を記述するのとほとんど同様の感覚で、「Webサービス」をコーディングすることができる。

 次の2つの画面は、これから作成しようとしている「作曲家検索サービス」Webサービスを、Webアプリケーションから呼び出して実行しているところである。このWebサービスは、作曲家の名前をキーに、該当する代表作を取得するためのものだ。

webservice.aspxの実行結果
Web Matrixサーバ上(ポート81)で公開されたWebサービス「作曲家検索サービス」をIIS(ポート80)上の「.aspx」ページから利用。作曲家の名前をキーに、該当する代表作を取得する。

○サンプル・アプリケーション構築の手順

 以下に構築までの手順を紹介してみよう。

(1)「XML Webサービス」ファイルを作成する

 XML Webサービスを作成するには、[Add New File]ダイアログで[(General)]−[XML Web Service]を選択すればよい。ただし、「ASP.NET Page」のときと異なり、ダイアログ下部で作成するクラス名と名前空間を必ず指定しなければならないので注意すること。ここでは、仮にクラス名を「ComposerSearch」、名前空間を「Wings」としておこう(ファイル名は「composer.asmx」)。

 すると、次のようなコードが自動生成されるはずだ。

<%@ WebService language="VB" class="ComposerSearch" %>

Imports System
Imports System.Web.Services
Imports System.Xml.Serialization

Public Class ComposerSearch
  <WebMethod> Public Function Add(a As Integer, b As Integer) As Integer
    Return a + b
  End Function
End Class
Webサービスのスケルトン(骨組み)
ダミーのサンプル・メソッドAddがすでに記述されている。

 ダミーのサンプル・メソッドAddを含むWebサービスのスケルトン(骨組み)がすでに記述されているので、これを以下のように書き換えてみる。

<%@ WebService language="VB" class="ComposerSearch" %>

Imports System
Imports System.Data
Imports System.Data.SqlClient

Imports System.Web.Services
Imports System.Xml.Serialization

Public Class ComposerSearch
  <WebMethod> Public Function GetWorks(name As String) As String
    Dim db As New SqlConnection("server='(local)'; user id='sa'; password='sa'; database='webmatrix'; Persist Security Info=True;")
    Dim com As New SqlCommand("SELECT [composer].[work] FROM [composer] WHERE ([composer].[name] = @name)",db)
    com.Parameters.Add("@name",name)
    db.Open()
    Dim rs As SqlDataReader=com.ExecuteReader()
    If rs.Read() Then
      Return rs.GetString(0)
    Else
      Return ""
    End If

  End Function
End Class
スケルトンから書き換えたWebサービスのコード

 取りあえず中身のロジックはさほど気にする必要はない。前節でも使用したcomposerテーブルに対してnameフィールドで検索を行い、workフィールドの値を取得しているという概要のみ理解しておけばよいだろう(ただし、該当するレコードが見つからない場合は、空文字列を返す)。こうしたデータベース連携コードを簡単に記述する方法については、今後の連載の中であらためて解説することにする。

 ここで確実に押さえておきたい点は、ただ1つ、Webサービスとして公開したいメソッド(プロシージャ)の先頭には「<WebMethod>」という属性が必要な点だ。<WebMethod>属性は、そのほかにもWebサービスの特性を設定するためのさまざまな設定情報を持つが、それについてはここでは割愛する。

(2)Webサービス単体の動作を確認する

 ASP.NETは、Webサービスの動作を確認するための専用の画面インターフェイスを提供する。方法は簡単。「.aspx」ファイル同様、作成したcomposer.asmxをブラウザからリクエストすればよい。Web Matrixならば、ツール・バーから[>](Start)ボタンをクリックするだけだ。正しくコードが記述されていれば、以下のような画面が表示される。

ComposerSearch Webサービス
「.asmx」ファイルで公開されているWebサービスの一覧を表示。

 画面上部には、「.asmx」ファイルで公開されるWebサービス・メソッドがリスト表示される。ここでは、(1)で作成したGetWorksメソッドが表示されているはずだ。

 GetWorksメソッドをクリックすると、GetWorksメソッドをテストするための簡易画面が表示される。ここでは引数nameだけを指定すればよいので、composerテーブル上に登録されている作曲者名として、例えば「ショパン」と入力し、[起動]ボタンをクリックしてみよう。

GetWorksメソッドのテスト画面
必要なパラメータを入力し、[起動]ボタンをクリックすることで、Webサービスのテストが可能。

 新規ウィンドウが起動し、戻り値を含む以下のようなXML文書が返されれば成功だ。もちろん、その値はcomposerテーブル(workフィールド)の値によって異なる。

GetWorksメソッド実行の結果
GetWorksメソッドの戻り値がXML形式で返される。ここからは、戻り値のデータ型とデータ値そのものを読み取ることができる。

 なお、ここで一度、[ComposerSearch Webサービス]のトップ画面に戻っていただくと、画面トップに「サービスの説明」というリンクが見つかるはずだ。ここをクリックすると、以下のようなXML文書が返される。これは、WSDL(Web Services Description Language)と呼ばれるもので、その名のとおり、Webサービスに関する構成情報(引数や戻り値の数、またそのデータ型)を記述するための言語である。実際に、任意の第三者がWebサービスを利用する場合には、このWSDLで記述された定義を基に「どのようにサービスにアクセスしたらよいのか」を知ることになる。

composer.asmxによって生成されたWSDL文書
composer.asmxによって提供されるサービスの内容がXML形式で返される。主にWebサービスに対して引き渡すことができるパラメータの数・データ型、戻り値のデータ型などの情報を含む。

 WSDLはもちろん、開発者自身で記述することも可能であるが、ASP.NETではこのように「.asmx」ファイルを基にして自動生成することができる。このWSDLは後から使用するので、心にとどめておいてほしい。


 INDEX
  Web Matrixで始めるWebアプリ・プログラミング
  第3回 Web MatrixでWebアプリケーションを開発しよう
    1.データベース連携アプリケーションの開発
    2.データベースへの接続設定を行う
  3.XML Webサービスの活用
    4.Webサービスのクライアントを作成する
 
インデックス・ページヘ  「Web Matrixで始めるWebアプリ・プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間