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 列に示すように、アクティビティの中には追加の引数を取るものがあります。
アクティビティ |
説明 |
他の引数 |
---|---|---|
HTTP サービスで GET を実行 |
||
HTTP サービスに対して POST を実行 |
InArgument RequestContent |
|
HTTP サービスに対して PUT を実行 |
InArgument RequestContent |
|
HTTP サービスに対して DELETE を実行 |
||
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,
},
}
};