前回まででASP.NETアプリケーションからASP.NET AJAXを利用するための準備は整いました。そこで今回と次回は,インストールの成否を確認するという意味も兼ねて,初歩的なAjaxアプリケーションを作成してみることにしましょう。

 紹介するのは,ごくシンプルな検索アプリケーションです。テキストボックスにISBNコード(書籍を一意に特定するコード)を入力すると,対応する書籍名を表示します(図1)。別稿「基本的なAjaxアプリケーションを作成してみよう(前編)」でも紹介しているサンプルのASP.NET AJAX対応版です。こちらとも比較しながら見ていくことでより理解が深まるはずです。

図1:ISBNコードを入力して[検索]ボタンをクリックすると(a),対応する書名を表示する(b)
(a)

(b)

 それではさっそく構築の手順を追っていきます。

サーバーサイドの処理を実装する

 ASP.NET AJAXにおいてサーバーサイドでの機能を提供するのは「.asmx」ファイル(XML Webサービスクラス)の役割です。ソリューションエクスプローラから新規の「.asmx」ファイルを作成すると,Webサービスクラスの骨組みが自動生成されますので,リスト1の要領でコードを追記してください(追記部分は太字)。なお,「.asmx」ファイルの名前はなんでも構いませんが,ここではBookSearch.asmxとしておきます。

リスト1:サーバーサイドの処理を実装するWebサービスクラス(BookSearch.asmx)

<%@ WebService Language="VB" Class="BookSearch" %>  …(1)

Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols Imports Microsoft.Web.Script.Services

<WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ScriptService()> _ ・・・(2) Public Class BookSearch Inherits System.Web.Services.WebService …(3)

' 入力されたISBNコード(isbn)をキーに対応する書名(result)を取得。 ' 通常のアプリケーションでは,ここでデータベースへの検索処理などを行う

<WebMethod()> _ …(4) Public Function GetTitleByIsbn(ByVal isbn As String) As String Dim result As String Select Case isbn Case "4-7981-1070-1" result = "XMLデータベース入門 NeoCore/XprioriでXMLDBを極める!" Case "4-88337-491-2" result = "書き込み式 SQLのドリル ドンドン身に付く,スラスラ書ける" Case "4-7980-1270-X" result = "Pocket詳解PHP辞典" Case Else result = "不明" End Select Return result End Function End Class

 Webサービスクラスとは言っても,ごく普通のクラスとほとんど同じ要領で記述できることがおわかりになるはずです。ASP.NET AJAXからWebサービスクラスにアクセスする際のルールとしておさえておきたいのは,以下の4点です(番号はリスト中の赤字に対応)。

(1)@WebServiceディレクティヴを指定する(Class属性は必須)
(2)WebサービスクラスにはScriptService属性を付与する
(3)WebサービスクラスはWebServiceクラスを継承する(任意)
(4)WebサービスメソッドにはWebMethod属性を付与する

 ただし,上記宣言のほとんどはVisual Studioが「.asmx」ファイルを新規作成する際に自動生成してくれるものですので,アプリケーション開発者がことさらに意識する必要があるのは(2)と(4)のみです。WebMethod属性は公開するすべてのメソッドに付与する必要があります。以下にWebMethod属性の一般的な構文を示します。

<WebMethod([プロパティ名:=値 [,...]])>

 WebMethod属性で利用可能なプロパティは,以下の通りです(表1)。すべてのプロパティは任意ですので,特に設定がいらないという場合には,シンプルに「<WebMethod()>」と記述すればOKです。

表1:WebMethod属性の主なプロパティ
プロパティ概要デフォルト値
BufferResponseバッファ処理を有効にするかTrue
CacheDurationキャッシュの有効期限(秒)0
Descriptionメソッドの説明
EnableSessionセッション機能を有効にするかFalse
MessageName外部への公開名(メソッド名)
TransactionOptionメソッドのトランザクションサポート Disabled(無効)

XML Webサービスの動作をテストページから確認する

 以上を理解したら,XML Webサービスが正しく動作しているかどうかを確認してみることにしましょう。ソリューションエクスプローラ上,BookSearch.asmxを選択した状態で,ツールバーから[デバッグ開始]ボタンをクリックすると,図2のようなテストページが表示されるはずです。

図2:BookSearch.asmxのテストページ(クリックで拡大表示)

 BookSearchクラス上,Webサービスとして公開されているメソッドの一覧が表示されますので,ここではGetTitleByIsbnメソッドをクリックしてみましょう。すると,以下のようにGetTitleByIsbnメソッドを動作確認するための画面が表示されます(図3)。

図3:GetTitleByIsbnメソッドの確認画面(クリックで拡大表示)

 ここではisbn欄に「4-7981-1070-1」と入力したうえで,[起動]ボタンをクリックします。新規ウィンドウが開き,以下のようにメソッドの戻り値とそのデータ型などの情報がXML形式で表示されれば成功です。

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://temputi.org/">
  XMLデータベース入門 NeoCore/XprioriでXMLDBを極める!
</string>
 このように,ASP.NETではXML Webサービスを単体で確認するための機能を標準で提供しています。サーバーサイドの機能を実装した場合には,いきなりクライアントページからアクセスするのではなく,まずテストページを使って確認することで,エラー発生時にも問題の個所を特定しやすくなります。

☆    ☆    ☆

 以上,今回は書籍検索アプリケーションのサーバーサイド機能を実装する方法について紹介しました。次回は,今回実装したWebサービスメソッドを,クライアント・ページから呼び出す方法について紹介します。

 本連載はASP.NET AJAX β1リリース(2006年10月20日時点)の情報を基に執筆しています。今後のβ2,Release Candidate版,正式版などでは仕様が変更される可能性がありますのでご注意ください。