Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C# ネットワーク (Network)

SOAP通信の仕組みやHTTPプロトコルとの違いなど

投稿日:

 

<目次>

(1) SOAP通信の仕組みやHTTPプロトコルとの違いなど
 (1-1) SOAPとは?
 (1-2) SOAPを構成する要素
 (1-3) SOAPの通信の仕組み&HTTPとの違い

(1) SOAP通信の仕組みやHTTPプロトコルとの違いなど

(1-1) SOAPとは?

「Simple Object Access Protocol」の略で、軽量のXMLベースの通信プロトコルです。
 
分散型(=複数のサーバでシステムを構成してあたかも1つのシステムのように見せる構成)の環境におけるデータ通信(Webサービス間の通信)や、そのWebサービスを利用するクライアントとの間の通信の方法を規定しています。
 
SOAPは様々なプログラミング言語のアプリケーション間で追加開発を行わずにスムーズに通信できるような「中間言語」となるように開発されました。
 
どのプログラミング言語でも理解できるXML形式データがありますが、各言語においてXMLに関する統一の規約がないため、そこでSOAPが登場します。
 

(1-2) SOAPを構成する要素

SOAPにおいてクライアントやWebサービスに連携するメッセージは「SOAPメッセージ」と呼ばれており、次のような構成になっています。
 
(図111)

●①SOAP Envelope

XMLをSOAPメッセージとして識別するための要素です。要素タグ「<soap:Envelope>」で定義されます。
(例1)
<soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
(例2)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
 <!-- ボディ部 -->
</SOAP-ENV:Envelope>

●②SOAP Header

「SOAP Envelope」内のヘッダー情報を保持する部分です。例として以下のような情報を保持できます。
 
(例)Headerで保持する情報の例
・リクエストを送ったアプリケーション側で使用できる認証の資格情報
・SOAPメッセージ内で使用できる「複合型(Complex Types)」のデータ(xsd)を定義する
 
(例)Header部で保持する「複合型」について
複合型は要素タグ「<xsd:complexType>」で定義されます。
<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Fruit Name" type="xs:string"/>         
  	<xsd:element name="Fruit Description"  type="xs:string"/>
  	<xsd:element name="Fruit Quantity"  type="xs:integer"/>
  </xsd:sequence>
</xsd:complexType>
(補足)Header Blockについて
SOAPヘッダーは複数定義する事もできますが、複数個定義した場合はその配下の要素(子要素)は「Header Block」として認識されます(階層構造として認識される)。
 

●③SOAP Body

ボディ部では全ての「リクエスト(要求)」と「レスポンス(応答)」の情報を保持しています。つまり、Webサービス間やWebサービス-クライアント間で実際に受け渡したい中身のデータを保持します。
 
(例)Body部で、Headerにて定義した複合型の値をセットして連携
<soap:Body>
   <GetFruitInfo>
		<FruitName>Apple</FruitName> 
		<FruitDescription>Made in Aomori</FruitDescription>
		<FruitQuantity>250</FruitQuantity> 
   </<GetFruitInfo>>
</soap:Body>
 
(補足)
Body Elementはボディ部内の各要素を指しています(例:<p:departure>など)。
 

(1-3) SOAPの通信の仕組み&HTTPとの違い

全てのSOAPの通信は基本的にHTTPプロトコル経由で行われます。なので「SOAPとHTTPの違い」という意味では、そもそも比較するものではなく土俵が違うものである、という事になります。
 
では、SOAPはどのようにHTTPでどのように使われるのでしょうか?おおまかな流れとしては次の通りです。
 
(図121)
(流れ)
・①SOAPメッセージの生成
「クライアント側」で処理コールや引数の情報をSOAPメッセージのXMLに纏めます。
 
・②SOAPメッセージの送信
「クライアント側」でSOAPメッセージをHTTPリクエストの一部として送ります。
 
・③SOAPメッセージの受信&レスポンス
「サーバ側」で受信したSOAPメッセージを解凍し、適切なレスポンスをSOAPメッセージ形式でクライアントに返却
 
これにより、SOAPは開発言語に依存しない通信が実現できます。加えて、SOAP登場以前に使われていたRPC通信で問題だったFirewallのポート開放に伴う煩雑な設定などが不要となり(HTTPリクエストに乗せて送れるため)、その点においてもメリットがあります。
 

Adsense審査用広告コード


Adsense審査用広告コード


-C#, ネットワーク (Network)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Xamarin.Formsで画面遷移を実装する手順について+ソースコードも紹介

<目次> (1) Xamarin.Formsで画面遷移を実装する手順について  (1-1) 遷移先ページの追加  (1-2) 画面遷移ロジック追加   (1-2-1) ボタンコントロールの追加   ( …

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

Xamarin.Formsのプロジェクトを新規作成する手順

<目次> (1) Xamarin.Formsのプロジェクトを新規作成する手順  (1-1) Xamarin.Formsプロジェクトの作成   (1-1-1) プロジェクト新規作成   (1-1-2) …

C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介

  <目次> (1) C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介  (1-1) 概要   (1-1-1) スレッドのライフライクルについて   (1-1-2) ma …

無線LANアダプタの使い方について

  <目次> (1) 無線LANアダプタの使い方について  (1-1) 概要  (1-2) 手順(「Archer T2U Nano」の例) (1) 無線LANアダプタの使い方について 現代で …

  • English (United States)
  • 日本語
Top