OpenSOAP Architecture
OpenSOAPアーキテクチャの概要
OpenSOAPは以下のようなアーキテクチャとなっています.

OpenSOAPは大きく分けて
の3つのパートとから構成されています.
クライアントAPIは,クライアントシステムと結合して,SOAPリクエストメッセージ(Envelope)の作成,
サービスの呼び出し(Invoke),SOAPレスポンスメッセージの解釈を行います.
サービスの呼び出し先(Endpoint)は,どのようなSOAP実装でもかまいません.
OpenSOAPサーバは,TransportInterface で受け取ったSOAPメッセージのメソッド名を読んで,
適切なサービスプログラムに配送します.条件に従って他のOpenSOAPサーバへ転送したり,
レスポンスメッセージをスプールすることでクライアントとの非同期的接続もサポートします.
サービスAPIは,OpenSOAPサーバと接続,もしくは単独で稼動することにより,
サービスシステムをWebサービス化します.サービスAPIはSOAPリクエストメッセージの受け取りと解釈,
SOAPレスポンスメッセージの作成をサポートします.
このほか,OpenSOAPセキュリティ機能の一つとして,認証局へのアクセス(公開鍵の取得,登録)もサポートされており,独自の認証局を設立することも可能です.
クライアントAPIはC言語ライブラリとして提供されています.
OpenSOAPパッケージのインストール後,デフォルトの設定の場合,
/usr/local/include を インクルードパスに追加し,/usr/local/lib をライブラリパスに追加します.
コンパイル時,クライアントプログラムの場合はライブラリとして,-lOpenSOAPClient を指定します.
また,shared library なシステムでは,/usr/local/lib を実行時ライブラリの検索パスに追加します.
OpenSOAP ver1.0では,クライアントAPIの OpenSOAPTransport 関数を用いて,
HTTP1.0に準拠したメッセージを送受信することができます.
OpenSOAPクライアントAPIを用いたプログラミング方法については,
プログラミングガイドをご参照ください.
サービスAPIはC言語ライブラリとして提供されています.
内容として,クライアントAPIに加え,サービス公開/登録用APIが含まれます.

OpenSOAPパッケージのインストール後,デフォルトの設定の場合,
/usr/local/include を インクルードパスに追加し,/usr/local/lib をライブラリパスに追加します.
コンパイル時,サービスプログラムの場合はライブラリとして, -lOpenSOAPService -lOpenSOAPClient を指定します.
また,shared library なシステムでは,/usr/local/lib を実行時ライブラリの検索パスに追加します.
OpenSOAPサービスAPIは,標準入出力によってOpenSOAPサーバと通信・連携,もしくはinetdサービスとして単体で稼動する「StdIOモード」と,
Apache等,CGIをサポートするHTTPサーバを介して稼動する「cgiモード」のいずれかを選択することができます.
また,複数のメソッドを登録して,それぞれに異なった機能を定義することができます.
OpenSOAPサービスAPIを用いたプログラミング方法については,
プログラミングガイドをご参照ください.
OpenSOAPサーバは,クライアント/サービス間の多対多運用をサポートします.
また,サービスの長時間処理に対応する非同期クライアント接続機能,
サービスの探索やファイアウォール越えを実現するサーバ間転送機能,
OpenSOAPサーバ自身の認証を行うセキュリティ機能などが含まれています.
OpenSOAPサーバ Transport Interface
OpenSOAPサーバは独立したトランスポートインターフェイスを持っています.
Ver1.0では,トランスポートインターフェイスはCGIで構成されたプログラム(soapInterface.cgi)が提供されていますので,
OpenSOAPサーバを利用するためには,Apache等,CGIをサポートするHTTPサーバが必要です.
サービスの登録
OpenSOAPサーバVer.1.0では,サービスプログラムと,標準入出力もしくはSocketによって接続することができます.
OpenSOAPサービスAPIによってサービスプログラムを構築する場合,StdIOモードで構成する必要があります.
OpenSOAPサーバとサービスプログラムとの接続方法は,OpenSOAPの設定ファイルディレクトリに格納された
SSML(SOAP Service Mapping Language)で定義します.SSMLファイルはサービスプログラムごとに作成する必要があります.
標準入出力で接続する場合には,SSMLにサービスプログラムの位置と実行オプションを指定します.
また,socket接続の場合は,inetdサービスとしてサービスプログラムを登録する必要があります.
inetdサービスへの登録方法,SSMLについての詳しい記述は,ドキュメントをご覧ください.
非同期処理
OpenSOAP仕様では,リクエスト受領後,クライアントとのセッションを一度切った状態でサービス処理を進行させ,
処理終了後はサーバ内のスプールに処理結果を保存し,
再度クライアントからのポーリングによってサービスの処理結果を返信する「非同期処理」を実現します.
OpenSOAPサーバは,クライアントから非同期処理指定のリクエストメッセージを受け取ると,
リクエストに対してユニークなメッセージIDを割り当て,メッセージIDのみを記述したレスポンスメッセージをクライアントに返します.
クライアントは,OpenSOAPサーバから受け取ったメッセージID入りのメッセージを再度そのOpenSOAPサーバに送信すると,
サービス処理が終了していてOpenSOAPサーバ内のスプール領域に該当するレスポンスメッセージが存在する場合には,
そのレスポンスメッセージをクライアントに返します.
以下にそのためのリクエストメッセージのヘッダ記述方法を記載します.OpenSOAPサーバはこのヘッダ情報を読み取り,非同期処理を行います.
<SOAP-ENV:Header>
<opensoap-header:opensoap-header-block
xmlns:opensoap-header="http://header.opensoap.jp/1.0/">
<opensoap-header:ttl opensoap-header:type="second">80</opensoap-header:ttl>
<opensoap-header:async>true</opensoap-header:async>
</opensoap-header:opensoap-header-block>
</SOAP-ENV:Header>
|
次にOpenSOAPサーバから返されるメッセージIDの例を示します.
<?xml version="1.0" encoding="EUC-JP"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
encodingStyle="http://schemas.xml.soap.org/soap/encoding/">
<SOAP-ENV:Header>
<opensoap-header:opensoap-header-block
xmlns:opensoap-header="http://header.opensoap.jp/1.0/">
<opensoap-header:message_id>
Add.linux.opensoap.jp.2002102415243800001
</opensoap-header:message_id>
</opensoap-header:opensoap-header-block>
</SOAP-ENV:Header>
<SOAP-ENV:Body/>
</SOAP-ENV:Envelope>
|
サーバ間転送
OpenSOAP仕様では,目的のサービスを管理するサーバまでメッセージを伝達する「サーバ間転送」を実現します.
OpenSOAPサーバは,自身の管理するサービスに目的とするメソッドがないとき,すなわち,SSMLファイルに該当する記述がないときには,
そのOpenSOAPサーバが知る別のSOAPサーバへメッセージを転送します.
転送先は,サーバのデフォルト設定ファイル(ドキュメント参照)に記述して設定するか,
クライアントがメッセージの中で明示的に,転送パスもしくは転送上限回数を指定することができます.
(転送上限,転送パス双方を同時に指定した場合は,パスの指定が優先されます)
以下にそのためのリクエストメッセージのヘッダ記述方法を記載します.OpenSOAPサーバはこのヘッダ情報を読み取り,転送処理を行います.
転送上限回数で指定する場合
<SOAP-ENV:Header>
<opensoap-header:opensoap-header-block
xmlns:opensoap-header="http://header.opensoap.jp/1.0/">
<opensoap-header:ttl opensoap-header:type="second">80</opensoap-header:ttl>
<opensoap-header:async>false</opensoap-header:async>
<opensoap-header:forwarder>
<opensoap-header:hopcount>2</opensoap-header:hopcount>
</opensoap-header:forwarder>
</opensoap-header:opensoap-header-block>
</SOAP-ENV:Header>
|
転送経路(パス)を指定する場合
<SOAP-ENV:Header>
<opensoap-header:opensoap-header-block
xmlns:opensoap-header="http://header.opensoap.jp/1.0/">
<opensoap-header:ttl opensoap-header:type="second">80</opensoap-header:ttl>
<opensoap-header:async>false</opensoap-header:async>
<opensoap-header:forwarder>
<opensoap-header:forward_path>
http://fwdhost0.opensoap.jp/cgi-bin/soapInterface.cgi
</opensoap-header:forward_path>
<opensoap-header:forward_path>
http://fwdhost1.opensoap.jp/cgi-bin/soapInterface.cgi
</opensoap-header:forward_path>
</opensoap-header:forwarder>
</opensoap-header:opensoap-header-block>
</SOAP-ENV:Header>
|
Copyright (C) 2001-2004 Webmasters of www.opensoap.jp. All
Rights Reserved.
ご利用の際は 免責・著作権情報をご覧ください.
|