OpenSOAP Logo OpenSOAP Project
The Middleware as Platform for IT Application Services

メニュー

-トップ
-OpenSOAPについて
-リリース
-ドキュメント

-ダウンロード
-協力
-リンク

-FAQ
-バグ情報
-ロードマップ

-検索
-連絡先
-バグジラ

English version

OpenSOAP Architecture

OpenSOAPアーキテクチャの概要

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

OpenSOAP Architecture

OpenSOAPは大きく分けて

の3つのパートとから構成されています.

クライアントAPIは,クライアントシステムと結合して,SOAPリクエストメッセージ(Envelope)の作成, サービスの呼び出し(Invoke),SOAPレスポンスメッセージの解釈を行います. サービスの呼び出し先(Endpoint)は,どのようなSOAP実装でもかまいません.

OpenSOAPサーバは,TransportInterface で受け取ったSOAPメッセージのメソッド名を読んで, 適切なサービスプログラムに配送します.条件に従って他のOpenSOAPサーバへ転送したり, レスポンスメッセージをスプールすることでクライアントとの非同期的接続もサポートします.

サービスAPIは,OpenSOAPサーバと接続,もしくは単独で稼動することにより, サービスシステムをWebサービス化します.サービスAPIはSOAPリクエストメッセージの受け取りと解釈, SOAPレスポンスメッセージの作成をサポートします.

このほか,OpenSOAPセキュリティ機能の一つとして,認証局へのアクセス(公開鍵の取得,登録)もサポートされており,独自の認証局を設立することも可能です.

クライアントAPI

クライアント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

サービスAPIはC言語ライブラリとして提供されています. 内容として,クライアントAPIに加え,サービス公開/登録用APIが含まれます.

OpenSOAP API Structure

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サーバ自身の認証を行うセキュリティ機能などが含まれています.

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.
ご利用の際は 免責・著作権情報をご覧ください.