ASP.NET AJAXにおいてサーバサイドの機能を提供するのは.asmxファイル(XML Webサービス・クラス)の役割だ。ここでは、クライアント・ページから送信された郵便番号(postnumパラメータ)をキーに、addressテーブルを前方一致検索し、合致した住所情報を文字列として返すXML Webサービス・クラス(ServiceBridge.asmx)を定義してみよう。このServiceBridge.asmxの具体的なコードは、以下のとおり。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace="http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public class ServiceBridge : System.Web.Services.WebService {
[WebMethod()]
public AddressData[] GetAddressesByPostnum(String postnum) {
List<AddressData> result = new List<AddressData>();
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Public Class ServiceBridge
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function GetAddressesByPostnum(ByVal postnum As String) As AddressData()
Dim result As New List(Of AddressData)
Dim setting As ConnectionStringSettings = _
ConfigurationManager.ConnectionStrings("MyDB")
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(setting.ProviderName)
Using db As DbConnection = factory.CreateConnection()
db.ConnectionString = setting.ConnectionString
Dim comm As DbCommand = factory.CreateCommand()
' postnumパラメータをキーに住所情報を前方一致検索
comm.CommandText = "SELECT postnum, prefecture, city, other FROM Address WHERE postnum LIKE @postnum"
comm.Connection = db
Dim param As DbParameter = factory.CreateParameter()
param.ParameterName = "@postnum"
param.Value = postnum & "%"
comm.Parameters.Add(param)
db.Open()
Dim reader As DbDataReader = comm.ExecuteReader()
' 取得した県、市、そのほかの情報を連結し、
'その値をリストに追加
Do While reader.Read()
Dim data As New AddressData()
data.Postnum = reader("postnum")
data.Address = reader("prefecture") & reader("city") & reader("other")
result.Add(data)
Loop
End Using
' リストを配列(AddressDataオブジェクト配列)に変換
Return result.ToArray()
End Function
End Class
' 住所情報を格納するためのAddressDataクラスを定義
Public Class AddressData
Public Postnum As String
Public Address As String
End Class