WS-ReliableMessaging の使用
"はじめに" で説明したように、InterSystems IRIS は、WS-ReliableMessaging 仕様の一部をサポートします。この仕様は、メッセージのシーケンスを確実に順番に送信するメカニズムを提供します。このサポートを使用する最も簡単な方法は、セキュリティ・ポリシーを作成し、Web サービス/クライアント構成ウィザードの [信頼性の高いメッセージ配信] オプションを使用することです。別のオプションは、このトピックで説明するように、信頼性の高いメッセージングを手動で使用することです。
Web クライアントからメッセージのシーケンスを送信する
InterSystems IRIS Web クライアントから WS-ReliableMessaging をサポートする Web サービスにメッセージのシーケンスを確実に送信するには、以下の手順を実行します。
-
必要に応じて、Web クライアントのセキュリティ・ヘッダ要素を指定します。
WS-SecureConversation を使用している場合は、安全な通信を開始します。
-
%SOAP.RM.CreateSequenceOpens in a new tab の Create() クラス・メソッドを呼び出します。クラスのインスタンスを返します。
このメソッドには、以下のシグニチャがあります。
classmethod Create(addressingNamespace As %String, oneWay As %Boolean = 0, retryInterval As %Float = 1.0, maxRetryCount As %Integer = 8, expires As %xsd.duration, SSLSecurity As %Boolean = 0) as %SOAP.RM.CreateSequence
以下はその説明です。
-
addressingNamespace は、WS-Addressing をサポートするために使用されるネームスペースです。既定は "http://www.w3.org/2005/08/addressing" です。
-
oneWay は、要求シーケンスのみが作成される場合に True になります。
-
retryInterval は、再試行される前に待機する間隔の秒数です。
-
maxRetryCount は、アクティビティが発生しなかった場合の再試行の最大数です。
-
expires は、要求されるシーケンスの送信の有効期間を指定するXML 形式の有効期間です。
-
SSLSecurity は、Web クライアントが SSL を使用して Web サービスに接続するかどうかを指定します。
-
-
Web クライアントの %StartRMSession() メソッドを呼び出し、%SOAP.RM.CreateSequenceOpens in a new tab のインスタンスを引数として渡します。
%SOAP.RM.CreateSequenceOpens in a new tab のインスタンスは一度しか使用できません。つまり、このインスタンスを使用して、後で別のセッションを作成することはできません。
-
必要に応じて Web メソッドを呼び出します。
毎回同じ Web クライアント・インスタンスを使用します。
-
メッセージの送信を完了したときに Web クライアントの %CloseRMSession() メソッドを呼び出します。
WS-ReliableMessaging ヘッダに署名する
以下のいずれかの方法で、WS-ReliableMessaging ヘッダに署名できます。
SecurityContextToken を使用してヘッダに署名する
WS-SecureConversation を使用している場合は、Web クライアントの SecurityContextToken プロパティには対称鍵が含まれ、これを WS-ReliableMessaging ヘッダ要素の署名に使用できます。そのためには、%SOAP.RM.CreateSequenceOpens in a new tab のインスタンスの AddSTR() メソッドを呼び出し、SecurityContextToken プロパティを引数として渡します。
do createsequence.AddSTR(client.SecurityContextToken)
この処理は、%StartRMSession() を呼び出す前に実行します。
メッセージに署名するときにヘッダに署名する
メッセージの残りに署名するときと同じ方法で WS-ReliableMessaging ヘッダにも署名できます。このためには、%XML.Signature の Create() メソッドまたは CreateX509() メソッドを呼び出す場合に、値 $$$SOAPWSIncludeRMHeaders を signatureOptions 引数に追加します。$$$SOAPWSIncludeRMHeaders マクロは、%soap.inc ファイルに含まれます。
WS-ReliableMessaging をサポートするように Web サービスを変更する
WS-ReliableMessaging をサポートするように InterSystems IRIS Web サービスを変更するには、以下が実行されるように Web メソッドを変更します。
-
着信要求メッセージに WS-ReliableMessaging ヘッダが含まれることを確認します。
-
WS-ReliableMessaging ヘッダが署名されていることを確認します。
InterSystems IRIS は、シグニチャが有効かどうかを自動的に確認します。"着信メッセージの検証と解読" を参照してください。
-
次のセクションの説明に従って、Web サービス・クラスのパラメータを指定して、Web サービスの動作を微調整できます。
ただし、セキュリティ・ポリシーを作成し、Web サービス/クライアント構成ウィザードの [信頼性の高いメッセージ配信] オプションを使用する方が簡単です。
Web サービスで信頼性の高いメッセージングを処理する方法を制御する
Web サービス・クラスの以下のパラメータを指定して、Web サービスの動作を微調整できます。
WS-ReliableMessaging の InOrder ポリシー・アサーションに対応します。0 (False)、もしくは 1 (True) に指定します。詳細は、Web Services Reliable Messaging Policy 1.1 の仕様を参照してください。
既定では、このパラメータが指定されていない場合、InterSystems IRIS Web サービスはメッセージの順序に関する SOAP フォルトを発行しません。
WS-ReliableMessaging の DeliveryAssurance ポリシー・アサーションに対応します。"ExactlyOnce"、"AtLeastOnce"、または "AtMostOnce" に指定します。詳細は、Web Services Reliable Messaging Policy 1.1 の仕様を参照してください。
既定では、このパラメータが指定されていない場合、InterSystems IRIS Web サービスはこのポリシー・アサーションに従った配信の失敗に関する SOAP フォルトを発行しません。
Web サービスによって受信されるシーケンスでアクティビティがない場合のタイムアウトを秒数で指定します。既定値は 10 分です。
[信頼性の高いメッセージ配信] オプションを使用するセキュリティ・ポリシーを使用する Web サービス・クラスで同じパラメータを指定できます。
また、Web サービスの %OnCreateRMSession() コールバック・メソッドを実装することもできます。このメソッドは、%SOAP.RM.CreateSequenceResponse が返される前に、WS-ReliableMessaging セッションの開始時に呼び出されます。この時点では、応答引数は完全に作成されており、まだ返されていません。このコールバックによって、任意の必須セキュリティ・ヘッダ要素を Web サービスの SecurityOut プロパティに追加可能になります。WS-Policy が使用されている場合は、WS-Policy サポートによってこの操作が自動的に実行されます。メソッド・シグニチャについては、%SOAP.WebServiceOpens in a new tab のクラス・リファレンスを参照してください。