Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > MSDN アカデミック アライアンス > 第 4 回:XML Web サービスと SOAP

第 4 回:XML Web サービスと SOAP

〜 Visual C# による XML チュートリアル 〜

4.1 はじめに

Microsoft は、次世代のインターネット戦略として 「Microsoft .NET」 を掲げています。「Microsoft .NET」 には、インターネット全体に分散配置されたアプリケーションやデータを必要に応じていつでもどこでも利用可能にする構想があります。「Microsoft .NET」 は、そのビジョンを実現するため、XML Web サービスを提唱しています。XML Web サービスとは、Web を介して再利用可能なサービスを提供するアプリケーションコンポーネントです。XML Web サービスでは、XML 形式でデータ交換を行い、通信のために SOAP (Simple Object Access Protocol) を使用します。SOAP とは、分散ネットワークでXML ベースのデータをやり取りするためのプロトコルです。そこで、第 4 章では、「Microsoft .NET」 において重要な XML Web サービスの概念について触れ、XML 関連の標準規格である SOAP について詳しく解説します。前半では、XML Web サービスと SOAP について解説し、後半では、Visual C# .NET を用いて XML Web サービスと XML Web サービス利用したアプリケーションを開発します。

4.2 XML Web サービス

4.2.1 XML Web サービスとは

XML Web サービスは、URL でアドレス指定ができるアプリケーションであり、XML Web サービス利用者に対して必要な情報を XML 形式で送り返すアプリケーションです。本章では、XML Web サービスのクライアントを 「XML Web サービス利用者」、XML Web サービスのサーバを 「XML Web サービス」 と定義します。例えば、銀行が運営する Bank XML Web サービスがローン計算サービスを提供する場合、XML Web サービス利用者は、作成するアプリケーションにローン計算サービスを利用できます。XML Web サービスのイメージを図 1 に示します。

図 1 XML Web サービスのイメージ

図 1 XML Web サービスのイメージ

XML Web サービスは、SOAP を基本的なデータ通信手段として使用することにより、異なるコンポーネントモデル、オペレーティングシステム、およびプログラミング言語を使用するシステム間のデータ共有を可能にしました。そのため、XML Web サービス利用者は、XML Web サービスから情報をいつでもどこでも受け取ることが可能です。また、Web アプリケーション開発者は、様々な環境で開発、運用されている XML Web サービスと連携したアプリケーションを開発できます。これらは、XML Web サービスの特徴として挙げられます。XML Web サービスの特徴を図 2 に示します。

図 2 XML Web サービスの特徴

図 2 XML Web サービスの特徴

4.2.2 XML Web サービスの仕組み

XML Web サービスでは、XML Web サービスの位置を特定するために 「サービスの検索」 を行います。また、XML Web サービスは、異なる環境に存在するためにサービスの有無を確かめる 「サービスの探索」、サービスの使用方法を定義する「サービスの説明」、実際にサービスを利用する 「サービスの利用」 という仕組みを備えています。XML Web サービスの仕組みを図 3 に示します。

図3 XML Web サービスの仕組み

図3 XML Web サービスの仕組み

XML Web サービスの仕組みについて、詳細を次に示します。

(1) XML Web サービスの検索

XML Web サービスは、Web 上に複数存在するため、利用するXML Web サービスを検索する必要があります。XML Web サービスの検索には、XML Web サービスレジストリを利用します。

XML Web サービスレジストリとは、様々な組織によって提供された XML Web サービスを検索するサービスです。XML Web サービスレジストリは、XML Web サービス提供者により XML Web サービスの内容が登録されており、その URL を XML Web サービス利用者へ提供します。XML Web サービスレジストリの構築方法や XML Web サービスレジストリへのアクセス方法は、UDDI (Universal Description, Discovery and Integration) により定義されています。

(2) XML Web サービスの探索

「サービスの探索」 では、XML Web サービスとサービスを説明する文書の有無を確認します。XML Web サービス利用者は、「サービスの検索」 で得た URL を用いて、XML Web サービスへ 「サービスの探索」 を行います。「サービスの探索」 を要求された XML Web サービスは、XML Web サービス利用者へ自らの存在とサービスの一覧を返します。「サービスの検索」で交換されるメッセージは、WSDL (Web Services Description Language) により定義されています。

(3) XML Web サービスの説明

「サービスの説明」 では、XML Web サービス利用者と XML Web サービスの通信方法や機能、データ型、コマンドなどを互いのシステムで確認します。これは、互いに全く面識のないシステム同士が自己紹介をするようなものです。XML Web サービス利用者は、「サービスの説明」 を XML Web サービスへ要求します。「サービスの説明」 を要求された XML Web サービスは、XML Web サービス利用者へ説明を返します。「サービスの説明」 で交換されるメッセージは、「サービスの探索」 と同様に WSDL (Web Services Description Language) により定義されています。

(4) XML Web サービスの利用

「サービスの利用」 では、XML Web サービス利用者が XML Web サービスを呼び出し、XML Web サービスがサービスを提供します。サービスは、SOAP、HTTP GET、HTTP POST のいずれかの方法で呼び出します。その 3 つの中でも SOAP は、XML でデータ交換を行うため、最も利用しやすいです。SOAP については、次節で詳しく解説します。

4.3. SOAP

SOAP は、XML Web サービスにおいて必要不可欠な技術です。Web アプリケーション開発者は、XML Web サービスを操作するために SOAP について知る必要があります。本節では、SOAP について詳しく解説します。まず、SOAP メッセージの構造について解説し、次に、SOAP メッセージの詳細について解説します。

4.3.1 SOAP メッセージの構造

SOAP は、XML Web サービスにおいて、サービスを利用する場合に標準的な通信形式として使用されます。SOAP では、XML Web サービス間で交換するメッセージの形式を定義しています。例えるならば、SOAP は、郵便の封筒のような役割をします。SOAP メッセージは、Envelope (封筒) 要素、Header 要素、Body 要素の 3 つの要素で構成されます。SOAP メッセージの構造を図 4 に示します。

図 4 SOAP メッセージの構造

図 4 SOAP メッセージの構造

SOAP メッセージは、Envelope 要素、Header 要素、Body 要素で構成される XML 文書です。Envelope 要素は、SOAP メッセージのルート要素です。Envelope 要素では、SOAP メッセージで取り扱う文字の符号化規則や SOAP メッセージ全体で使われる規則を指定します。Envelope 要素は、ルート要素であるため必須です。Header 要素には、XML Web サービス利用者の呼び出しに関する拡張情報を記述します。具体的には、ユーザ名やパスワードなどのセキュリティ情報を記述します。Header 要素は、拡張情報であるため省略できます。Body 要素には、実際に交換されるメッセージの内容を記述します。Body 要素は、SOAP メッセージの中心となるため必須です。基本的な SOAP メッセージのテンプレートを次に示します。

<soap:Envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
	<soap:Header>
		<!-- ここにHeader要素を記述する -->
	</soap:Header>
	<soap:Body>
		<!-- ここにBody要素を記述する -->
	</soap:Body>
</soap:Envelope>

4.3.2 SOAP メッセージの詳細

本項では、XML 名前空間、SOAP メッセージ内の 3 つの要素について解説します。

(1) XML 名前空間

SOAP メッセージに使用する要素や属性は、他の XML 文書の要素や属性と区別される必要があります。これは、XML Web サービスが SOAP メッセージを解釈するときの混乱を防ぐためです。そこで、SOAP メッセージでは、XML 名前空間を使用します。XML 名前空間とは、URI (Uniform Resource Identifiers) を用いて、XML 文書内の要素や属性を区別するものです。URI とは、世界に存在するさまざまなリソースを識別するための一意の名前を与える構文で URL を拡張したものです。XML 名前空間の例を次に示します。

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<soap:Header> <!-- ここにHeader 要素を記述する --> </soap:Header> <soap:Body> <!-- ここにBody 要素を記述する --> </soap:Body> </soap:Envelope>

(2) Envelope 要素

Envelope 要素では、SOAP メッセージの Envelope 要素で使用される標準の要素と属性を定義します。要素と属性は、http://schemas.xmlsoap.org/soap/envelope の XML 名前空間で定義されています。

Envelope 要素では、encodingStyle 属性を指定できます。encodingStyle 属性は、SOAP メッセージの情報を符号化する規則を示します。SOAP のデフォルトの符号化規則は、http://schemas.xmlsoap.org/soap/encoding の XML 名前空間で定義されています。Envelope 要素の例を次に示します。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<soap:Header> <!-- ここにHeader 要素を記述する --> </soap:Header> <soap:Body> <!-- ここにBody 要素を記述する --> </soap:Body>
</soap:Envelope>

(3) Header 要素

Header 要素では、SOAP メッセージ利用者の呼び出しに関する拡張情報を記述します。Header 要素では、mustUnderstand 属性を指定できます。mustUnderstand 属性は、XML Web サービスが SOAP メッセージの Header 要素の内容を理解できない場合、メソッドの呼び出しを実行しないことを指定します。

<soap:Envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
	<soap:Header>
<s:Security xmlns:s="URI" soap:mustUnderstand="1">
<UserName>fa12345</UserName> <Password>LaLaLa</Password> </s:Security> </soap:Header> <soap:Body> <!-- ここにBody要素を記述する --> </soap:Body> </soap:Envelope>

(4) Body 要素

Body 要素では、実際に交換されるメッセージの内容を記述します。Body 要素は、子要素に呼び出し要素、応答要素、Fault 要素を持ちます。呼び出し要素は、XML Web サービスのメソッドを呼び出すために必要な情報を表します。応答要素は、呼び出しに成功した XML Web サービスのメソッドの結果を表します。Fault 要素は、メソッドの呼び出しに失敗したことを表します。Fault 要素は、子要素に faultcode 要素、faultstring 要素、faultactor 要素、detail 要素を持ちます。faultcode 要素は、メソッドの呼び出し失敗の原因を faultcode で表します。faultcode を表 1 に示します。

表1 faultcode

faultcode意味
VersionMismatch無効な XML 名前空間の検出
MustUnderstandmustUnderstand の付いた Header 要素が理解不可能
Client送られてきたメッセージ構成の不良
Serverサーバ側のエラー

faultstring 要素は、人が読むことのできる形でエラーを表します。faultactor 要素は、エラーの原因を引き起こしたサーバの URI を表します。detail 要素は、Body 要素の処理に関する、XML Web サービス固有のエラー情報を表します。Body 要素の例を次に示します。

<soap:Envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
	<soap:Header>
		<s:Security xmlns:s="URI" soap:mustUnderstand="1">
			<UserName>fa12345</UserName>
			<Password>LaLaLa</Password>
		</s:Security>
	</soap:Header>
<soap:Body> <h:HelloName xmlns:h="URI2"> <MyName>fa12345</MyName> </h:HelloName> </soap:Body>
</soap:Envelope>

4.4 Visual C# による XML Web サービスの作成

本節では、Visual C# による簡単な XML Web サービスを作成します。まず、XML Web サービスと ASP.NET の関係について説明します。次に、Visual C# による XML Web サービスの作成手順について解説し、最後に、作成した XML Web サービスを利用する簡単なプログラムを作成します。

作成する XML Web サービスは、引数に名前を渡すと 「Hello!名前!」 と返事をするサービスを提供します。XML Web サービスを利用するプログラムは、名前を入力し、ボタンを押すとメッセージボックスに XML Web サービスからの返事が表示されます。

4.4.1 XML Web サービスと ASP.NET

ASP.NET とは、Visual Studio .NET が提供する Web アプリケーションや XML Web サービスを効率良く開発・運用するための環境です。ASP.NET は、.NET Framework を構成するコンポーネントの一つであり、IIS (Internet Information Server) を用いて XML Web サービスを動作させます。IIS とは、Microsoft が開発した Web サーバ・ソフトウェアです。ASP.NET は、Visual Basic .NET、Visual C# .NET、および JScript .NET を含む.NET互換の任意の言語でアプリケーションを作成できます。さらに、すべての ASP.NET アプリケーションで .NET Framework の全機能が利用できます。XML Web サービスと ASP.NET の関係を図 5 に示します。

図 5 XML Web サービスと ASP.NET の関係

図 5 XML Web サービスと ASP.NET の関係

このように、Visual C# .NET と ASP.NET を利用することで XML Web サービスや XML Web サービスを利用したアプリケーションの開発が容易に実現できます。また、ユーザは、Visual C# .NET の機能により、難しい SOAP や WSDL、UDDI の概念をほとんど気にせず、開発を進めることができます。それでは、実際に XML Web サービスを作成します。

4.4.2 XML Web サービスの作成

XML Web サービスの作成には、IIS がインストールされている必要があります。IIS のインストール方法は、他のマニュアル等を参照してください。

(1) 新しいプロジェクトの作成

まず、新しいプロジェクトの作成には、メニューから【ファイル】→【新規作成】→【プロジェクト】を選択します。次に、【Visual C# プロジェクト】→【ASP.NET Web サービス】を選択します。最後に、保存場所を指定し、【OK】ボタンを押します。ここでは、説明の都合上、保存場所を 「http://localhost/HelloNameService」 に指定します。【新しいプロジェクト】ダイアログボックスを図 6 に示します。

図 6 【新しいプロジェクト】ダイアログボックス

図 6 【新しいプロジェクト】ダイアログボックス

(2) ソースコードの追加

HelloNameService に HelloName メソッドを定義します。Service1.asmx へ HelloName メソッドのコードを追加します。追加するコードを次に示します。

[WebMethod]
public string HelloName(string strName) //名前を返すメソッド { return "Hello! " + strName + "!"; //受け取った名前に「Hello!」と「!」を追加
}

(3) XML Web サービスのビルド

作成した HelloNameService をビルドします。HelloNameService をビルドするには、【ビルド】→【HelloNameService のビルド】を選択します。

(4) 交換される SOAP メッセージ

本項で作成した XML Web サービスでは、次のような SOAP メッセージが交換されます。

要求メッセージ

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloName xmlns="http://tempuri.org/">
      <strName>string</strName>
    </HelloName>
  </soap:Body>
</soap:Envelope>

応答メッセージ

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloNameResponse xmlns="http://tempuri.org/">
      <HelloNameResult>string</HelloNameResult>
    </HelloNameResponse>
  </soap:Body>
</soap:Envelope>

ただし、string の部分には、実際の値が入ります。

以上で XML Web サービスの作成は完了です。次に、XML Web サービスを利用したアプリケーションを作成します。

4.4.3 XML Web サービスを利用したアプリケーションの作成

(1) 新しいプロジェクトの作成

まず、新しいプロジェクトの作成には、メニューから【ファイル】→【新規作成】→【プロジェクト】を選択します。次に、【Visual C# プロジェクト】→【Windows アプリケーション】を選択します。最後に、プロジェクト名と保存場所を指定し、【OK】ボタンを押します。ここでは、説明の都合上、プロジェクト名を 「HelloName」 に指定します。【新しいプロジェクト】ダイアログボックスを図 7 に示します。

図 7 【新しいプロジェクト】ダイアログボックス

図 7 【新しいプロジェクト】ダイアログボックス

(2) インタフェースの作成

Visual C# .NET のデザイン画面よりプログラムのインタフェースを作成します。インタフェースを図 8 に示します。

図 8 インタフェース

図 8 インタフェース

(3) Web 参照の追加

Windows アプリケーションから XML Web サービスのメソッドを呼び出すためには、Web 参照の追加をする必要があります。Web 参照の追加をするには、【プロジェクト】→【Web 参照の追加】を選択します。この操作により、【Web 参照の追加】ダイアログボックスが表示されます。【Web 参照の追加】ダイアログボックスでは、他の XML Web サービスと連携させるため、【アドレス】に対象の XML Web サービスの URL を入力します。今回は、次に示す URL を入力します。

http://localhost/HelloNameService/Service1.asmx

【Web 参照の追加】ダイアログボックスの表示例を図 9 に示します。

図 9 【Web 参照の追加】ダイアログボックスの表示例

(4) ソースコードの追加

次に、ソースコードを追加します。まず、HelloNameService で定義した HelloName メソッドを呼び出すため、localhost 名前空間の参照を追加します。localhost 名前空間の参照を次に示します。

using HelloName.localhost;

次に、button1_Click イベントハンドラへコードを記述します。button1_Click イベントハンドラへ追加するコードを次に示します。

private void button1_Click(object sender, System.EventArgs e)
{
string strResult;                    //結果文字列用変数 localhost.Service1 webservice = new localhost.Service1();//インスタンス生成 strResult = webservice.HelloName(textBox1.Text);    // 結果文字列を格納 MessageBox.Show(strResult);              //メッセージボックスの表示
}

4.4.4 実行結果

HelloName プロジェクトを実行します。HelloName プロジェクトの実行画面を図 10 に示します。

図 10 HelloName プロジェクトの実行画面

図 10 HelloName プロジェクトの実行画面

4.5 まとめ

本章では、XML Web サービスの概念と SOAP について解説し、実際に XML Web サービスと XML Web サービスを利用したアプリケーションを作成しました。Visual C# .NET では、 XML Web サービスや XML Web サービスを利用したアプリケーションが手軽に作成できます。また、Visual C# .NET では、理解し難い SOAP や WSDL、UDDI の概念をほとんど意識せず、XML Web サービスや XML Web サービスを利用したアプリケーションを簡単に開発できます。

XML Web サービスでは、SOAP が大きな役割を果たしています。XML Web サービス開発者や Web アプリケーション開発者は、SOAP メッセージを理解することにより、異なる環境で開発された多くの XML Web サービスを利用できます。

今後、様々な XML Web サービスが公開されることにより、XML Web サービス利用者は、ますます便利になります。例えば、アプリケーションソフトは、XML Web サービスとして提供され、いつでも最新版のものがインストールの必要がなく利用できます。また、今までにない、サービスやアプリケーションが登場する日も近いでしょう。XML Web サービスは、多くの可能性を秘めており、その動向から目が離せません。


著者紹介

田中 成典 (たなか しげのり)

1986年関西大学工学部土木工学科卒業
1988年関西大学大学院工学研究科 土木工学専攻博士課程前期課程修了
1996年博士 (工学) 授与,関西大学
1997年関西大学総合情報学部助教授 (現在に至る)
主な著書:やさしいCのはじめかた,オーム社,1993年
 建設技術者のための知識情報処理の実践,関西大学出版部,1999年
 DirectX8,工学社,2001年
 ステップアップXML,工学社,2002年
 Linuxアプリケーション入門,森北出版,2002年    ほか

中山 浩太郎 (なかやま こうたろう)

2001年3月関西大学総合情報学部卒業
2001年4月関西大学大学院総合情報学研究科入学 (現在に至る)
2002年4月同志社女子大学非常勤講師 (現在に至る)
主な著書:Web工房シリーズ Perlの達人,森北出版,1999年
 DirectX8,工学社,2001年
 Linuxアプリケーション入門,森北出版,2002年    ほか

石井 健一 (いしい けんいち)

1999年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
主な著書:ステップアップXML活用法,工学社,2002年

野中 一希 (のなか かずき)

1999年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
2002年1月株式会社関西総合情報研究所入社 (現在に至る)

中村 健二 (なかむら けんじ)

2000年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
2002年4月株式会社関西総合情報研究所入社 (現在に至る)


Microsoft