|
<転送プロトコルについて>
GSN Protocolは,データ転送プロトコルとして,SOAPと呼ばれる汎用でかつ軽量なプロトコルを採用している.SOAPは,Remote Procedure
Call (RPC)という分散システムを開発する際の通信方式を採用し,流れるデータとしてExtensible Markup Language (XML)を採用したプロトコルである.SOAPは,World
Wide Web Consortium(W3C)[3]のXML Protocol Working Groupで開発されているプロトコルである.SOAP特徴は次のとおりである.
・W3Cが定めている世界的に発展している汎用のプロトコル
・特定のベンダー,プラットフォーム,開発言語には依存しない
・データとしてXMLを採用することで,文字コード,改行コードの問題などが潜在的に存在しない
・開発言語(C++, Java, Perl, PHP, Visual Basic, C#など)に対応した,数多くのGeneral Public License
(GPL)の開発ライブラリが公開されている
・文献・情報などが豊富
・電子商取引,B2Bなどを一つのターゲットとしているため,データ暗号化,署名などのセキュリティ対策を容易に実装できる.
SOAPは,以上のような特徴があるが,セッション管理などについては規定していない.一般に,Hyper Text Transfer Protocol(HTTP)上にSOAPを用いる事が推奨されているが,例えば電子メールを送受信するSimple
Mail Transfer Protocol (SMTP)上にSOAPデータを送る事も可能である.GSN Protocolでは,HTTP上でSOAPを扱う事にする.HTTPでは,セッションがアクセスの度に切断されオーバーヘッドが発生しがちではあるが,開発ライブラリも豊富に存在し,Webとの親和性が高く,地上局の制御周期自体それほど短い必要がないためHTTPを採用する.
SOAPは,Remote Procedure Call (RPC)という通信方式を採用している.RPCは,分散システムを構成する際の一つの通信スタイルである.
下図に1例として,アンテナの方位角(Azimuth)をセットするRPCを紹介する.
|
Remote Procedure Call (RPC)
|
RPCクライアント(ユーザ)は,地上局を直接制御することができるRPCサーバーに対して,方位角をセットするようにリクエストメッセージを送る(コールする).
その際のリクエストメッセージは,
・メソッド名:SetAzimuth
・パラメータ名:AzimuthInDegrees
・パラメータのデータ型:double(倍精度浮動小数点型)
・パラメータの値:30.3
を含んでRPCサーバに送信される.
RPCサーバは,リクエストメッセージを受け取り,メソッド名(SetAzimuth)からアンテナの方位角を,パラメータから受け取った角度,30.3度に設定する.その実行結果を,レスポンスメッセージとしてRPCクライアントに送信する.
レスポンスメッセージは
・レスポンスデータ名:SetValueInDegrees
・レスポンスデータのデータ型:double(倍精度浮動小数点型)
・レスポンスデータの値:30.3
を含んでRPCクライアントに送信される.
このクライアントからサーバにリクエストメッセージを送り,サーバ側でそのリクエストに対するメソッドを実行(制御)し,その結果としてクライアントにレスポンスメッセージを送るという1回の実行(手続き)をRemote
Procedure Call (RPC)という.
つまり,RPCを用いて地上局を遠隔操作するためには,地上局の各操作(アンテナ方向制御,無線機周波数制御,変調方式制御など)に対して,それぞれ
・メソッド名
・パラメータ名,データ型
・レスポンスのデータ名,データ型
を規定すればよい.この規定は次節で述べるGSCPで規定している.
SOAPは,このRPCを,XMLデータとして扱うプロトコルであり,以下にそのメッセージ例を示す.
リクエストメッセージ(SOAP):メソッド名"setAzimuth",パラメータ名"ID(string)",
"Password(string)", "Antenna(int)", "AzimuthInDegrees(double)" |
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:setAzimuth xmlns:m="http://www.unisec.jp/gsn">
<ID xsi:type="xsd:string">root</ID>
<Password xsi:type="xsd:string">pass</Password>
<Antenna xsi:type="xsd:int">1</Antenna>
<AzimuthInDegrees xsi:type="xsd:double">30.3</AzimuthInDegrees>
</m:setAzimuth>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> |
レスポンスメッセージ(SOAP):レスポンス名"SetValueInDegrees(double)" |
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gsnns="http://www.unisec.jp/gsn">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<gsnns:setAzimuthResponse>
<SetValueInDegrees xsi:type="xsd:double">30.3</SetValueInDegrees>
</gsnns:setAzimuthResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> |
こう見るとSOAPは複雑のように見えるが,実際にはSOAPの開発ライブラリを利用するので,上記のようなXMLデータを直接扱うことはない.SOAPでは,例えばSecure
Socket Layer(SSL)などを用いることで上記メッセージを暗号化しセキュリティ性の高いRPCも比較的容易に実装が可能である.SOAPを用いた具体的な実装方法は,後節で紹介している.
|