Workflow Manager 1.0 の Http アクティビティ

 

Workflow Manager 1.0 は、送信メッセージを Http サービスに送信できるようにする一連のメッセージ アクティビティを提供します。通常、各アクティビティは 1 つの Http 動詞を表します。このトピックでは、これらのアクティビティの概要を示します。

このトピックの内容

  • Http アクティビティの一般的なプロパティ

  • Http アクティビティ

    • 要求および応答コンテンツの指定

    • DynamicValue の Http ヘッダー

Http アクティビティの一般的なプロパティ

HTTP アクティビティの引数は非常に類似していますが、アクティビティでカプセル化する特定の HTTP 操作に何が関連するかによっては異なる引数が使用されます。各アクティビティの引数を使用すれば、HTTP サービスの呼び出しを成功させるために設定の必要がある、次のようなパラメーターのコア セットを指定することができます。

  • サービスの URI

  • 要求ヘッダーとコンテンツ

  • 応答ヘッダーとコンテンツ

  • リターン状態コード

  • セキュリティ保護された呼び出しのセキュリティ トークン

次の表示に、すべての HTTP アクティビティで共通のプロパティと引数を一覧表示します。

プロパティ

説明

InArgument<string> Uri

要求の URI。

InArgument<DynamicValue> RequestHeaders

要求メッセージの HTTP ヘッダー。

InArgument<SecurityToken> SecurityToken

GetS2SSecurityToken アクティビティを使用して要求ベースの委任パターンを有効にします。

注: このプロパティでは、JsonWebTokens (JWTs) および OAuth2 bearer トークンを使用するよう HTTP アクティビティを設定します。したがって、このプロパティは S2S を使用してセキュリティ保護されたスコープに属するワークフロー内でのみ使用できます。ワークフローをインスタンス化する呼び出し元の要求 (つまり、アクティブ化メッセージ) が使用され、展開のために構成された送信署名証明書を使用して送信トークンが署名されます。

bool RetryOnConnectionFailure

指数バックオフを使用して、タイムアウトまたは接続ロスが原因で失敗した要求の自動的な再試行を有効にします。

ActivityFunc<HttpStatusCode, DynamicValue, DynamicValue, bool> HttpErrorHandler

特定の HttpStatusCode、応答ヘッダー、および応答コンテンツに基づいた再試行のロジックの処理を有効にします。

OutArgument<DynamicValue> ResponseHeaders

応答メッセージの HTTP ヘッダー。

OutArgument ResponseContent

応答メッセージの本文の内容。

OutArgument<HttpStatusCode> HttpStatusCode

応答メッセージの HttpStatusCode。

Http アクティビティ

Workflow Manager 1.0 は、送信メッセージを Http サービスに送信できるようにする一連のメッセージ アクティビティを提供します。通常、各アクティビティは 1 つの Http 動詞を表します。次の表に、Workflow Manager 1.0 で使用できる HTTP アクティビティを一覧表示します。このようなアクティビティはすべて、「Http アクティビティの一般的なプロパティ」に説明されている共通の引数およびプロパティのセットを取ります。このような共通のプロパティおよび引数に加えて、Other Arguments 列に示すように、アクティビティの中には追加の引数を取るものがあります。

アクティビティ

説明

他の引数

HttpGet

HTTP サービスで GET を実行

HttpPost

HTTP サービスに対して POST を実行

InArgument RequestContent

HttpPut

HTTP サービスに対して PUT を実行

InArgument RequestContent

HttpDelete

HTTP サービスに対して DELETE を実行

HttpMerge

eTag を使用して操作を更新するファース トクラス ヘッダー

InArgument RequestContent

InArgument<String> Etag

要求および応答コンテンツの指定

要求コンテンツおよび応答コンテンツを提供する場合は、基本オブジェクト (たとえば、要求コンテンツとしてシリアル化される文字列、数値、日付) または DynamicValue を渡すことができます。

HTTP アクティビティは次のように DynamicValue と深い統合関係にあります。要求の場合、指定した DynamicValue は自動的に Json 表現にシリアル化され、HTTP 呼び出しの要求コンテンツとして設定されます。応答の場合、サーバーから返されるコンテンツは DynamicValue にロードされます (これは有効な Json として応答が返される場合にのみ機能します)。

次のコード例は、HttpGet を使用して Netflix からの情報を DynamicValue に入力し、そのプロパティの一部をアクティビティ内で使用する方法を示したものです。

Variable<DynamicValue> response = new Variable<DynamicValue>();
Variable<string> name = new Variable<string>();
Variable<string> synopsis = new Variable<string>();
Variable<string> releaseYear = new Variable<string>();
Variable<string> result = new Variable<string>();

Activity sequence = new Sequence
{
    Variables = { response, name, synopsis, releaseYear, result },
    Activities =
    {
        // get the data from Netflix
        new HttpGet
        {
            Uri = "http://odata.netflix.com/Catalog/Titles?$filter=Name%20eq%20'The%20Name%20of%20The%20Rose'",
            ResponseContent = new OutArgument<DynamicValue>(response)
        },

        // read some properties from the result
        new GetDynamicValueProperties
        {
            Source = response,
            Properties = 
            {
                { "d/results(0)/Name", new OutArgument<string>(name) },
                { "d/results(0)/Synopsis", new OutArgument<string>(synopsis) },
                { "d/results(0)/ReleaseYear", new OutArgument<string>(releaseYear) }
            }
        },

        // create a new string with the properties read the previous step
        new FormatString
        {
            Format = "{0} ({1}): {2}",
            Arguments = 
            {
                new InArgument<string>(name),
                new InArgument<string>(releaseYear),
                new InArgument<string>(synopsis),
            },
            Result = result
        }
    }
};

注意

DynamicValue と HTTP アクティビティとの統合は、コンテンツを Json として受け取るまたは返すサービスに対してサポートされます。AtomPub は現在 DynamicValue 統合でサポートされていません。

DynamicValue の Http ヘッダー

HTTP ヘッダーは DynamicValue として指定されます。アクティビティのヘッダーを設定するには、使用するヘッダーを含む DynamicValue を作成して渡す必要があります。

Variable<DynamicValue> requestHeaders = new Variable<DynamicValue>();
Variable<DynamicValue> responseHeaders = new Variable<DynamicValue>();


var sequence = new Sequence
{
    Variables = { requestHeaders, responseHeaders },
    Activities =
    {
        // setup the headers
        new BuildDynamicValue
        {
            Result = requestHeaders,
            Properties = 
            {
                { "Accept", new InArgument<string>("text/plain") },
                { "Accept-Charset", new InArgument<string>("utf-8") },
            }
        },

        // get the data from Netflix
        new HttpGet
        {
            Uri = "https://contoso.com?var1=val",
            RequestHeaders = requestHeaders,
            ResponseHeaders = responseHeaders,
        },
    }
};