|  | 
 
  <転送プロトコルについて> 
 
  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を用いた具体的な実装方法は,後節で紹介している.
 
 
 |