最終回 Webサービス・プロバイダを作ろう(後編)

前回作成したWebサービス・プロバイダを公開し、それを利用するクライアントの作成方法を紹介。さらに、そのクライアントを発展させてポータル・アプリケーションを実現する。(編集局)

中林 紀彦
日本アイ・ビー・エム株式会社
2003/3/29

Webサービスの公開

 第4回では、データベースを利用したWebサービス・プロバイダを作成しました。最終回となる今回は、このWebサービス・プロバイダを外部に公開する方法と、それを利用したポータル的なソリューションの作成方法を紹介します。

Apacheの設定

 前回、Webサービス・プロバイダをApacheのDSOとして作成したので、Apacheの設定を行います。/usr/local/apache/conf/httpd.confを編集し、以下の行を追加します。

LoadModule WeatherSoapServer_module  libexec/libWeatherSoapServer.so
<Location /Weather>
    SetHandler libWeatherSoapServer-handler
</Location>

 編集後、httpd.confのテスト(apachectl configtest)を行ってからApacheを再起動(起動)します。httpd.confの編集やテストについて、詳しくは第2回を参考にしてください。

WSDLの公開

 Webサービス・クライアントの作成時(第3回)でも触れましたが、クライアントがWebサービスを利用するには、サービスの内容を事前に知っておく必要があります。サービスの提供者は、サービスの内容を公開しなければいけません。

 今回は、WSDLを使ってサービスを公開します。WSDLによる公開は、WSDLHTMLPublishコンポーネントで実現します。このコンポーネントは、「SOAPサーバーアプリケーション」を作成した際に自動的に追加されるので、特に意識する必要はありません。

 WebDispatchプロパティのPathInfoが「wsdl*」に設定されているので、アプリケーションのURLの後ろに/wsdl/[インターフェイス名]を付けることでWSDLを表示させることができます。

 それでは、公開されているWSDLを確認してみましょう。WSDLを確認するには、Webブラウザで次のURLにアクセスします。

http://[ホスト名]:[ポート番号]/Weather

画面1 Webブラウザで表示したWDSL

 画面1のように表示されているでしょうか? 5つのインターフェイスが表示されています。IWeatherは手動でコーディングして作成したインターフェイスです。また、IDataMod、IAppServer、IAppServerSOAPはインターフェイス名は違いますが実際は同じのもで、DataModuleのDataSetProvider2コンポーネントのデータを提供するインターフェイスです。IWSDLPublishはWSDLのためのインターフェイスで、主に内部的に利用されます。

 「IWeather」と「IDataMod」が第4回で作成したWebサービスなので、それぞれの「[WSDL]」を開いて確認してください。URLは先ほど説明したように、

http://[ホスト名]:[ポート番号]/Weather/wsdl/IWeather
http://[ホスト名]:[ポート番号]/Weather/wsdl/IDataMod

となっているはずです。

テスト用Webサービス・クライアントの作成

 それでは、作成したWebサービス・プロバイダを利用するためのクライアントを作成してみましょう。

テキスト表示Webサービス・クライアントの作成

 最初に、DataModuleを使わない一般的なインターフェイス(IWeatherインターフェイス)を利用したクライアントを作成します。[O.K.]ボタンを押すと、Editコンポーネントに天候がテキストで表示されるという単純なものです。

 [ファイル]−[新規作成]−[アプリケーション]で空のフォームを作成し、ユニット(FormU.pas)とプロジェクト(SoapClient.dpr)を保存します。

 次に、Webサービスを使うためにWSDLをインポートします。[ファイル]−[新規作成]−[その他]で、[WebServices]タブの「WSDLインポート」を選択します。また、オプションの「文字列をWideString型に割り当てる」のチェックを外します。

 IWeatherインターフェイスのWSDL(http://localhost:8080/Weather/wsdl/IWeather)をインポートします(IWeather1.pas)。

注:例ではサーバ名:localhost、ポート番号:8080としています。

 プロジェクトの準備ができたら、FormUに以下のコンポーネントを配置します。

  HTTPRIOコンポーネント HTTPRIO1
  Editコンポーネント Edit1
  Buttonコンポーネント Button1

 Edit1のTextは空白にし、Button1のキャプションを[O.K.]に変更します。

画面2 コンポーネントの配置

 HTTPRIO1のWSDLLocationプロパティに、先ほどインポートしたWSDLのURLと同じhttp://localhost:8080/Weather/wsdl/IWeatherをセットします。続いて、ServiceプロパティとPortプロパティを順にドロップダウンから選択します。URLが正しければ、それぞれIWeatherService、IWeatherPortが選択できるはずです。

 それでは、Webサービスを実装するためのコーディングを行いましょう。FormUで[ファイル]−[ユニットを使う]でIWeather1をプロジェクトに追加します。

 各コンポーネントを配置してプロパティを設定したら、Button1をダブルクリックしてイベントを記述します。

procedure TForm1.Button1Click(Sender: TObject);
var
  obj: IWeather;
begin
  obj := HTTPRIO1 as IWeather;
  Edit1.Text := '明日の東京は,' + obj.getWeather;
end;

 この部分は第3回でも詳しく説明しているので参考にしてください。

 では実行してみましょう。画面3のように、東京の天気が表示されたでしょうか?

画面3 Webサービス・クライアントの実行画面

画像を使ったWebサービス・クライアントの作成

 文字だけでは面白くないので、BLOBカラムに入っている画像を使ってお天気を表示させましょう(編注)。

編注:以降の画面に表示している天候を示す画像は、IILdotJP(http://www.iil.jp/)の天気アイコンを利用させていただきました。

 [ファイル]−[新規作成]−[アプリケーション]で空のフォームを作成し、ユニット(FormU.pas)とプロジェクト(SoapClient.dpr)を保存します。

 次に、SoapConnectionコンポーネント(SoapConnection1)をドロップします。今度はプロバイダ側のDataModuleを利用するので、前述のIDataModインターフェイスを使います。IDataModのWSDLでURLを確認し、URLプロパティを「http://localhost:8080/Weather/soap/IDataMod」とします。UseSOAPAdapterを「False」に変更し(重要です)、Connectedを「True」にします。

 UseSOAPAdapterを「False」に設定しないと、アプリケーション実行時にエラーになってしまいます。これは、マニュアルには記載されていないので注意が必要です。Borland Developer Networkに、これに関するQAが載っています。

http://bdn.borland.com/article/0,1410,28773,00.html

画面4 SoapConnection1のプロパティ設定

 ここまでできれば、後は通常のデータベースアプリケーションと同様です。

 ClientDataSetコンポーネントをドロップし、RemoteServerを「SoapConnection1」にします。ProviderNameは、ドロップダウンリストで「DataSetProvider2」が選択できるはずです。この際、Apacheを起動しておく必要があります。Activeプロパティを「True」にしてエラーがなければ、問題ありません。

 次に、DataSource(DataSource1)、DBGrid(DBGrid1)、DBImageコンポーネント(DBImage1)をドロップして、位置と大きさを調整します。

画面5 各コンポーネントを配置したところ

 DataSource1のDataSetプロパティを「ClientDataSet1」、DBGrid1およびDBImage1のDataSourceを「DataSource1」、DBImage1のDataFieldを「WIMAGE」に設定すると、画面6のようにデータが表示されます。このように、開発しながらデータを確認できるのは非常に便利です。

画面6 プロパティを設定すればデータが表示される

 実行して確認するまでもありませんが、念のため実行してみます。

画面7 Webサービス・クライアントの実行画面

 DBGridの選択行を変更すると、お天気の画像も変わりますね。

 SQL文にパラメータを用意していたので、Edit(Edit1)とButtonコンポーネント(Button1)を追加し、Edit1への入力を利用してClientDataSet1のパラメータを変更すれば、表示する都道府県を変えることもできます。

画面8 表示する都道府県を変更する機能を追加

 コンポーネントを配置したら、Button1に以下のイベントを追加します。これだけで上記の機能を実現することが可能です。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.Close;
  ClientDataSet1.Params[0].Value := Edit1.Text;
  ClientDataSet1.Open;
end;

1/2

Index
Kylix 3とDB2で作るWebサービス・アプリケーション
 最終回 Webサービス・プロバイダを作ろう(後編)
Page 1
Webサービスの公開
 Apacheの設定
 WDSLの公開
テスト用Webサービス・クライアントの作成
 テキスト表示Webサービス・クライアントの作成
 画像を使ったWebサービス・クライアントの作成
  Page 2
Webサービスによるポータル・アプリを作ろう
 データベースとテーブルの準備
 データのインポート
 新機能の実装
最後に

連載 Kylix 3とDB2で作るWebサービス・アプリ


 Linux Squareフォーラム プログラミング関連記事
特集:オブジェクト指向に生まれ変わるPHP5[前編]
現在開発中のPHP5は、オブジェクト指向機能が大幅に強化される。次世代PHPはどのような言語になるのか?
特集:Windows開発者に贈る Kylixの全貌
注目の開発環境「Borland Kylix」がいよいよ見えてきた。ここに、英語版の発売を目前に控えたKylixの機能やアーキテクチャを紹介しよう
特集:Kylixプログラミング作法
GUIの構築やコンポーネントとコードの関係、 Object Pascalの仕様など。 これらの点を、実際に日本語ベータ版でプログラミングしながら分かりやすく解説
連載:PHP4で作るWeb-DBシステム(全5回)
PHPはWebサーバとデータベースを結びつけるものだ。そのためPHPでの開発を開始するには、OS、データベース、Webサーバ、そしてPHPと、多くのソフトウェアのインストールを行う必要がある
連載:ステップ・バイ・ステップ・シェルスクリプト(全7回)
Linuxの中でシェルスクリプトはネットワークの設定、デーモンの起動など重要な役割を果たしている。この連載では、シェルスクリプトで実用的なプログラムを組むことを目標にして、シェルの基本的な知識を説明する
連載:Kylix 3とDB2で作るWebサービス・アプリ(全5回)
Kylix 3とDB2 V8.1を使って、Webサービス・アプリを作ってみよう。トライアル版も用意されているので、実際に試しながら読んでほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間