特集:効率的なデータベース開発の実践DBアクセス用のXML Webサービスとは?初音玲2009/02/06 |
|
|
■XML WebサービスにDBアクセスを実装する
まず「DbAccessService」という名前でASP.NET Webサービス・プロジェクト(Webサイト)を作成する。自動生成されるService.asmxファイルとApp_CodeフォルダのService.vbファイルは不要なので削除しておこう。
次に「DbAccessServiceTest」という名前でテスト・プロジェクトを作成する。自動生成されるManualTest1.mhtファイルとUnitTest1.vbファイルは削除しておこう。
最初にXML WebサービスのWebメソッドを作成する。今回は、認証処理を行うXML Webサービス(以下、Authサービス)とDBアクセス処理を行うXML Webサービス(以下、DbAccessServiceサービス)の2つを作成する。これには、メニュー・バーから[ファイル]−[新規作成]−[ファイル]を選択して、表示される[新しい項目の追加]ダイアログで[テンプレート]から「Web サービス」を選択し、[名前]に任意のサービス名(Authサービスの場合は「Auth.asmx」、DbAccessServiceサービスの場合は「DbAccessService.asmx」)を入力して、[OK]ボタンをクリックすればよい。App_Codeフォルダに自動生成された.vbファイルにはHelloWorldメソッドが自動生成されるので削除しておく。
【コラム】複数のXML Webサービスを構築するときの注意点 |
今回の実装では、1つのASP.NET Webサービス・プロジェクト(DbAccessService)に、AuthサービスとDbAccessServiceサービスの2つのXML Webサービスを実装するが、このように複数のXML Webサービスを実装することもできる(つまり、.asmxファイルを複数作成できる)。複数のXML Webサービスを用意する場合、1つのXML Webサービスを実装したASP.NET Webサービス・プロジェクトを複数作成する、あるいは、複数のXML Webサービスを実装したASP.NET Webサービス・プロジェクトを1つだけ作成する、という2つの実装形式が考えられるが、どちらがよいかは状況に応じて異なってくる。 例えば、ASP.NETではプロジェクトごとに仮想フォルダが別になり、アクセス権や資源管理などもそれぞれで管理できる。この特性を考えると、関連するXML Webサービスは1つのASP.NET Webサービス・プロジェクトにまとめて管理を集約し、関連度が低いXML Webサービスは別のASP.NET Webサービス・プロジェクトに分離して別管理にした方が効率的である。今回のAuthサービスとDbAccessServiceサービスは関連するXML Webサービスであるため、1つのASP.NET Webサービス・プロジェクトにまとめている。 |
それでは、DBアクセス用のWebメソッドを実装していこう。
●Webメソッドのパラメータを考察する
DBアクセスを行うWebメソッドを呼び出すときに必要な入力パラメータを考察する。DBアクセスに必要なパラメータとしては次の3つが考えられる。
- ユーザーID
- パスワード
- 接続先DBサーバ情報
この中で、接続先DBサーバ情報はマシン構成に依存するものなので、XML WebサービスのWeb.Configなどに記述する固定パラメータと考えて問題ない。しかし、ユーザーIDはDBアクセス権やDB監査機能などを考慮すると、利用者ごとに別々の値を取りたい。
よって、ユーザーID(および、そのパスワード)はサーバ側で定義するのではなく、Webメソッドの入力パラメータとする方がよい。今回の記事ではすべてのWebメソッドについて、ユーザーIDとパスワードを入力パラメータとして定義することにしよう。
それでは、実際に利用者の認証を行う(Authサービスの)Webメソッド(以下、利用者認証Webメソッド)を作成していこう。
(1)利用者認証Webメソッドの考察
DBを使った利用者認証であれば、ユーザーIDとパスワードだけで十分に思えるが、できればエラー・メッセージを返せるようなインターフェイスが欲しいところだ。利用者認証Webメソッドの戻り値にエラー・メッセージを設定してもよいが、ほかの機能との絡みを考えて出力(ByRef)パラメータとしてエラー・メッセージを定義し、Webメソッドの戻り値は認証に成功したか失敗したかを返すBoolean型としたい。
今回は、TDDの流れに沿って実装を行うので、まずは、戻り値は常にFalseを返す形でここまでのコードを作成する。App_Coce/Auth.vbファイルを開いて、Authクラス内に次のコードのWebメソッド(IsLoginメソッド)を追記する。
|
|
Auth.vbファイルに記述(ユーザーIDとパスワードでDB認証を行う利用者認証WebメソッドIsLoginの追記) |
DB認証の部分(Authサービスの実装)はひとまずこれで完了として、次にDBアクセスを行うDbAccessServiceサービスを実装していこう。ここでは単純にDBにアクセスして、EMPNO(=従業員番号)に合致するデータを検索するWebメソッド(以下、データ検索Webメソッド)を作成する。
(2)データ検索Webメソッドの考察
データ検索Webメソッドでは、利用者認証Webメソッドと同じDB認証の考慮点に加えて、データ検索用のキー値と取得したデータの返却について考える必要がある。利用者認証Webメソッドのときに決めた方針に沿うならば、検索キー(この例ではEMPNO)は入力パラメータ、データ返却はWebメソッドの戻り値が妥当だろう。データ返却はいろいろなアプローチがあるが、データセット(=DataSetオブジェクト)を設定して返却することにする。
具体的には、App_Coce/DbAccessService.vbファイルのDbAccessServiceクラス内に次のコード(GetRecordsメソッド)を記述する。なお、メソッドの仕様として、EMPNOにNothingが設定されたときは、全従業員のデータを返却する。
|
|
DbAccessService.vbファイルに記述(従業員番号に合致するデータを検索するデータ検索WebメソッドGetRecordsの追記) |
さらに、DBにアクセスして、従業員番号に合致するデータを更新するWebメソッド(以下、データ更新Webメソッド)を作成する。
(3)データ更新Webメソッドの考察
データ更新Webメソッドでは、利用者認証Webメソッドの考慮点に加えて、データ更新用のキー値と更新データの受け渡しについて考える必要がある。キー値(この例ではEMPNO)と更新データはパラメータとして定義し、更新成功ならばTrue、更新失敗ならばFalseを戻り値として返却する。
以上を実装すると、次のコード(SetRecordsメソッド)のようになる。
|
|
DbAccessService.vbファイルに記述(従業員番号に合致するデータを更新するデータ更新WebメソッドSetRecordsの追記) |
●テスト・プロジェクトを作成する
各Webメソッドのパラメータなどが決まったのでテスト・プロジェクトを作成する。今回は、単体テストのクラスを1つ作成する。これには、メニュー・バーから[テスト]−[新しいテスト]を選択して、表示される[新しいテストの追加]ダイアログで[テンプレート]から「単体テスト」を選択し、[名前]に任意の単体テスト名(今回は「DbAccessServiceTest.vb」)を入力して、[OK]ボタンをクリックすればよい。自動生成された.vbファイルにはTestMethod1メソッドが存在しているので削除しておく。
さらに、AuthサービスとDbAccessServiceサービスへのWeb参照を追加しておく。[Web 参照名]は、順に「TestAuth」「TestDbAccessService」とした。
作成したDbAccessServiceTest.vbファイルにテスト・コードを記述していくわけだが、今回のテスト・ケースとしては、次の8ケースが考えられる。それぞれTestメソッドとして定義する。
- 正しいIDとパスワードで認証が成功
- 誤ったパスワードで認証が失敗してエラー・メッセージ値を返却
- 誤ったパスワードを指定して検索したときに認証失敗
- 挿入したテスト・データをEMPNO(=EMPNO)指定でレコード取得
- 存在しないEMPNOを指定したときにレコードが取得できない
- 誤ったパスワードを指定して更新したときに認証失敗
- 存在するEMPNOを指定してレコードを更新
- 存在しないEMPNOを指定してレコード追加
以上のテスト・ケースを忠実に実装したテスト・コード(DbAccessServiceTest.vbファイル)はこちらからダウンロードできる。すべてのテスト・コード説明は割愛する(ちなみに、テスト・コードではOracle.DataAccess.Client名前空間のクラスが使われているが、これはOracle Databaseにアクセスするためのものである。詳しくは後述)。ここでは1番目のテスト・ケースを実装したTestメソッドのみを提示しておく。
|
|
「正しいIDとパスワードで認証が成功」を検証するTestメソッド(DbAccessServiceTest.vbファイルより抜粋) |
テスト・コードの実装が完了したら、単体テストを実行してみよう。XML Webサービスの中身がないので、当然、そのテスト結果はすべて失敗になる。
図11 テスト結果がエラーのところからスタート |
次に、テストが成功するようにXML Webサービスを作成していこう。
INDEX | ||
[特集]効率的なデータベース開発の実践 | ||
DBアクセス用のXML Webサービスとは? | ||
1.DBアクセス用のXML Webサービス | ||
2.XML Webサービスの作成 | ||
3.XML Webサービスの単体テストの実行 | ||
4.XML WebサービスのWebメソッドへのパラメータの考察 | ||
5.DBアクセスXML Webサービスを作成する | ||
6.DBアクセスXML Webサービスを使ってみる | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -