Visual Studio 2005による XML Web サービス入門

開発者カテゴリ
Visual Studio 2005による
XML Web サービス入門
アジェンダ
XML Web サービスの基本実装
Visual Studio での基本的な作り方
クライアントの基本的な作り方
Web サービス
Webサービスとは
インターネットの標準的なプロトコルを使ってアクセスできるサービス
.NET ではビルディング ブロックとも呼ばれる
ASP.NET では、XML Web サービスと呼ばれる
特徴
疎結合
広く使われるプロトコル (HTTP、SOAP、…)
統一的なデータ形式 (XML)
役割
異種プラットフォーム間の連携
企業間のシステムのシームレスな連携
企業内でのシステムの統合 (Enterprise Application Integration)
ASP.NET における XML Webサービス
XML Webサービス
.asmxファイルに実装し、他のアプリケーションのためにサービスを実行し、
XMLデータを返す
<soap:Envelope xmlns:soap="...">
<soap:Body>
<Add xmlns="http://www.abc.org/">
<a>10</a>
<b>20</b>
</Add>
</soap:Body>
</soap:Envelope>
http://srv/app/Service1.asmx
クライアント
アプリケーション
XML
<soap:Envelope xmlns:soap="...">
<soap:Body>
<AddResponse xmlns="http://www.abc.org/">
<AddResult>30</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>
Service1.asmx
実行
XML を生成
.asmx ファイルとクラス (参考)
クラスに Web メソッドを実装する
WebMethod 属性を持つメソッドを用意する
System.Web.Services.WebServiceクラスから派生する (オプション)
Service1.asmx
<%@ WebService ...
Class="MyService" %>
VB
Imports System.Web.Services
Public Class MyService
Inherits System.Web.Services.WebService
<WebMethod> Public Function Add(ByVal a As Integer, _
ByVal b As Integer) _
As Integer
Return a + b
End Function
End Class
.asmx ファイルとクラス (参考)
(続き)
Service1.asmx
<%@ WebService ...
Class="MySpace1.MyService" %>
C#
using System.Web.Services;
public class MyService
: System.Web.Services.WebService {
[WebMethod]
public int Add(int a, int b) {
return a + b;
}
}
.asmx ファイルの機能
Web サービスのインフラストラクチャ
Web サービス関連の機能を分類すると、、、 (MSDN ライブラリより)
ディレクトリ
ク
ラ
イ
ア
ン
ト
UDDIなどの
ディレクトリサービス
探索
説明
XML Webサービス
などのサービス
ワイヤ形式
HTLM 説明ページ
.asmx ファイル
ワイヤ形式
ASP.NET の XML Webサービスでのワイヤ形式
クライアントから呼び出すことができる Web メソッドとして提供
3種類の方法
HTTP-GET
HTTP-POST
SOAP over HTTP (HTTP-POST)
XML Webサービス
http://server1/app/Service1.asmx/Add?a=100&b=100
メソッド呼び出し
<int xmlns="http://tempuri.org/">300</int>
(HTTP-GET, HTTP-POST の場合)
HTML 説明ページ
HTML 説明ページ (HTML description page) とは
HTML 形式で Web サービスの機能を説明するページ
テスト ページを持つ
URL として .asmx ファイルが指定され、HTTP 要求 (HTTP-GET) を受け
ると、ASP.NET が自動生成する
説明
Webサービス記述言語 (WSDL) の提供
XML Webサービスへのアクセス形式が分る
ASP.NETの XML Webサービスでは、ある特定のアドレスにアクセスすると、
XML Webサービスへアクセスするための仕様書である WSDL (Web Service
Description Language) を自動生成することができる。
Visual Studio .NET では、WSDL を読み込ませると、Web サービスにアクセス
するために必要なコード (プロキシ クラス) を自動生成することができる。
XML Webサービス
http://server1/app/Service1.asmx?wsdl
WSDL
探索
ASP .NETでの XML Webサービス探索
XMLドキュメントとして提供
Webサービス記述言語(WSDL)を取得する手がかり
XML Webサービス
http://Server/app/Service1.asmx?disco
WSDLの取得方法など
<discovery xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="http://localhost/app/Service1.asmx?wsdl"
docRef="http://localhost/app/Service1.asmx"
xmlns="http://schemas.xmlsoap.org/disco/scl/" />
</discovery>
アジェンダ
XML Web サービスの基本実装
Visual Studio での基本的な作り方
クライアントの基本的な作り方
Visual Studio 2005 による開発
ASP.NET Web サービス用のテンプレート
Web サービスの雛型(テンプレート)が用意されている
Web サイトを作成
統合開発環境 (IDE)
ファイル構成
Web サイト
IIS上の仮想ディレクトリとして作成することも可能
デバッグ、実行に IIS 環境を直接使用
任意のファイル システム上に作成
デバッグ、実行に ASP.NET 開発サーバーを使用
ソリューションを作成
作業の開始はソリューション ファイルを開き、終了はソリューションを閉じる
WebSite1.sln
ソリューション ファイル
+
Service.asmx
Service.vb
Web.config
...
Web サイト用のフォル
ダ
実行/デバッグ
メニュー操作による起動
.asmx ファイルを選択して、[デバッグ開始] または [デバッグなしで開始]
HTML 説明ページが開く
HTML 説明ページからテスト ページを開いて WebMethod を呼び出す
HTTP POST を使用
SOAP メッセージを使った WebMethod 呼び出しを行うには、クライアント ア
プリケーションを作成する必要がある
デバッグ
テストページ、クライアント アプリケーションに関わらず、WebMethod のデ
バッグが可能
Web.config の <compilation> 要素の debug 属性を true に変更する必要が
ある (テンプレートの初期値は false)
デバッグ開始時、Visual Studio 2005 では、属性変更の問い合わせダイアログ
ボックスが表示される
アジェンダ
XML Web サービスの基本実装
Visual Studio での基本的な作り方
クライアントの基本的な作り方
Web 参照の追加 1/2
WSDL から情報取得
メソッド名、引数、戻り値
固有のデータスキーマ定義など
Web 参照の追加 2/2
プロキシ クラスの自動生成
利用されるプロトコルをカプセル化
引数や戻り値で必要な型定義も自動的に生成
Reference.vb ( Reference.cs )
プロキシ クラス
固有の型定義
DataSet派生クラス
プロキシ クラスの利用
プロキシ クラス
SOAP over HTTP を利用
System.Web.Services.Protocols.SoapHttpClientProtocol 派生クラス
名前空間 : クライアントプロジェクト既定の名前空間 . サーバー名
クラス名 : サーバー側の XML Webサービスクラス名
WSDL の Service要素 Name属性
メソッド名 : サーバー側の XML Webサービスのメソッド名
WSDL の Operation要素 Name属性
VB
Imports MyProj.Srv
:
:
Dim srv As New Service1()
n = obj.Add( 100, 200 )
C#
using MyProj.Srv;
:
:
Service1 srv = new Service1();
n = obj.Add( 100, 200 );