Skip to main content

 

SOAP

 

 

OutSystems

例: HTTPヘッダーを追加する

このシナリオ例では、利用中の特定のSOAP Webサービスのすべてのリクエストに新しいHTTPヘッダーを追加します。

ヒント: BeforeSendRequest関数に対して必要な調整を行って新しいヘッダーを追加する代わりに、提供されたサンプルを調整してリクエストのHTTPヘッダーを削除または変更することができます。

コードの概要

これを実行するには、以下の処理を実行するC# コードを作成する必要があります。

  1. 定義したアクションに対応してIntegration Studioによって作成された関数プレースホルダで、実装する必要があるカスタムエンドポイント動作を登録します。

  2. 次に、WCF(Windows Communication Foundation)からIEndpointBehaviorインターフェイスを実装するエンドポイント動作クラスを作成します。
    このクラスは、(次に実装する別のカスタムクラスに基づいて)メッセージインスペクタをクライアントのランタイムに追加します。これは新しいHTTPヘッダーをリクエストに追加する役割を果たします。

  3. HTTPヘッダーを追加するメッセージインスペクタクラスを作成し、BeforeSendRequest関数にコードを追加します。

以下の手順の実行方法について具体例を見てみましょう。

1.Integration Studioで、拡張機能を作成してアクションを定義します。このアクションは、リクエストの送信前にSOAPリクエスト要素を追加するカスタムメッセージインスペクタを登録します。
この例では、入力パラメータを持たない「RegisterHttpHeaderCallback」というアクションをIntegration Studioで定義しています。

2.[Edit Source Code .NET]をクリックします。プロジェクトのターゲットフレームワークを設定し、System.ServiceModelアセンブリへの参照を追加します。
以下のコードを入力し、Integration Studioで作成されたMssRegisterHttpHeaderCallback関数プレースホルダを置き換えます。

// required 'using' statements at the beginning of the file
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using OutSystems.SOAP.API;

/* ...*/

// replace the 'MssRegisterHttpHeaderCallback' function placeholder with the following code
public void MssRegisterHttpHeaderCallback() {
    SoapRequest.RegisterEndpointBehavior(new AddHttpRequestHeaderBehavior());
}

3.WCFのインターフェイスであるIEndpointBehaviorを実装するカスタムクラスAddSoapHeaderBehaviorを作成し、以下のコードを含めます。

class AddHttpRequestHeaderBehavior : IEndpointBehavior {

    void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) {
        clientRuntime.ClientMessageInspectors.Add(new AddHttpRequestHeaderMessageInspector());
        // you can add more message inspectors here:
        // clientRuntime.ClientMessageInspectors.Add(new [...]);
    }

    void IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) {
        // do nothing
    }

    void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) {
        // do nothing
    }

    void IEndpointBehavior.Validate(ServiceEndpoint endpoint) {
        // do nothing
    }
}

注記: このユースケースの場合、コードを追加する必要があるのはApplyClientBehavior関数のみです。

4.WCFのインターフェイスであるIClientMessageInspectorを実装するカスタムクラスAddHttpRequestHeaderMessageInspectorを作成し、以下のコードを含めます。

class AddHttpRequestHeaderMessageInspector : IClientMessageInspector {

    object IClientMessageInspector.BeforeSendRequest(ref Message request, IClientChannel channel) {
        string headerName = "MyCustomHeader1";
        string headerValue = "400";

        // before sending a request, add a new HTTP header, specifying its name and value
        if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out object httpRequestMessageObject)) {
            HttpRequestMessageProperty httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
            httpRequestMessage.Headers.Add(headerName, headerValue);
        } else {
            HttpRequestMessageProperty httpRequestMessage = new HttpRequestMessageProperty();
            httpRequestMessage.Headers.Add(headerName, headerValue);
            request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
        }
        return null;
    }

    void IClientMessageInspector.AfterReceiveReply(ref Message reply, object correlationState) {
        // here you would handle the web service response
    }
}

このクラスでは、ユースケースに応じて、リクエストを処理する関数(BeforeSendRequest)または応答を処理する関数(AfterReceiveReply)のいずれか、あるいはその両方にコードを追加できます。
SOAPリクエストヘッダーに要素を追加するため、BeforeSendRequest関数にコードを追加します。

5.Visual Studio .NETを停止し、Integration Studioに戻ります。Integration Studioで、[1-Click Publish]ツールバーアイコンをクリックするか、またはF5キーを押して、拡張機能をパブリッシュします。

6.Service Studioで、アプリケーションモジュールに拡張機能の「RegisterHttpHeaderCallback」アクションへの参照を追加します。

7.SOAP WebサービスのSOAPコールバックフロー、つまりOnBeforeRequestAdvancedのフローで、RegisterHttpHeaderCallbackアクションをフローにドラッグします。

8.アプリケーションモジュールをパブリッシュしてアプリケーションをテストし、HTTPヘッダーがWebサービスのリクエストに追加されていることを確認します。

  • Was this article helpful?