Skip to main content

Web クライアントからのカスタム転送の指定

既定では、InterSystems IRIS® データ・プラットフォーム Web クライアントを使用する場合、Web クライアントでは HTTP を使用して SOAP メッセージが Web サービスに転送され、その応答が受信されます。ユーザ独自の転送クラスを定義し、使用できます。

背景

使用する Web サービスと通信するには、InterSystems IRIS Web クライアントに転送クラスが必要です。転送クラスは、通信に関連するパラメータ、プロパティ、およびメソッドを備えています。全体的な通信の動作は、以下のとおりです。

  1. Web クライアント・プロキシ・メソッドが実行されている場合、Web クライアント・インスタンスは Transport プロパティの値をチェックします。

    このプロパティが NULL の場合、Web クライアント・インスタンスは、それ自体を転送クラスのインスタンスとして使用します。このようなクラスを定義した場合、代わりに、Transport プロパティを他の適切なクラスのインスタンスと等しくなるように設定できます。

  2. Web クライアント・インスタンスは、転送クラスの DoSOAPRequest() メソッドを実行して、次の引数を渡します。

    1. Web クライアント・クラスの OREF

    2. SOAP アクションを指定する文字列

    3. UTF-8 でエンコードされた要求を含むストリーム

    4. 応答を含むストリーム (参照による)

  3. Web クライアント・インスタンスは、結果のステータスをチェックし、それに応じて動作します。

HTTP 転送の場合、DoSOAPRequest() メソッドには以下のロジックがあります。

  1. 要求オブジェクト (%Net.HttpRequestOpens in a new tab のインスタンス) を作成し、そのプロパティを設定します。ここで、このメソッドは、Web クライアント・インスタンスのプロパティの値を使用します。特に HttpRequestHeaderCharset プロパティとその他の HTTP 関連のプロパティの値を使用します。

  2. SOAP 要求のヘッダを確認した上で要求オブジェクトのヘッダを初期化します。

  3. 要求オブジェクトの Post() メソッドを実行します。これは、HTTP 転送に適したアクションです。

  4. 応答を取得し、それを返します。

Important:

%SOAP.WebClientOpens in a new tabDoSOAPRequest() メソッドは直接的に使用しないでください。この動作および以降の処理は保証されません。前述の概要は、一般的なヒントとして提供しています。

InterSystems IRIS Web クライアントのカスタム転送の定義

InterSystems IRIS Web クライアントでカスタム転送を使用できるようにするには、カスタムの転送クラスを定義します。次に、Web クライアントのインスタンスを作成した後に、その Transport プロパティを転送クラスのインスタンスと等しくなるように設定します。

転送クラスに関する要件は、以下のとおりです。

  • 転送クラスは、インスタンス化可能 (つまり、非抽象) である必要があります。

  • 転送クラスは、以下で説明するように DoSOAPRequest() メソッドを実装する必要があります。

DoSOAPRequest() メソッドは、要求を Web サービスに転送して、応答を取得します。このメソッドのシグニチャは、以下のようにする必要があります。

Method DoSOAPRequest(webClient,action,requestStream, responseStream) As %Status 
  • webClient は、Web クライアント・クラスの OREF です。

  • action は、SOAP アクションを指定する %StringOpens in a new tab です。

  • requestStream は、UTF-8 でエンコードされた要求を含むストリームです。

  • responseStream は、DoSOAPRequest() が応答の記述に使用する %FileBinaryStreamOpens in a new tab 引数です。このストリームでは、?xml 指示文のエンコード属性で指定した文字セットにデータを含める必要があります。UTF-8 の使用をお勧めします。

FeedbackOpens in a new tab