워크플로 관리자 1.0 Http 작업

 

Workflow Manager 1.0에서는 아웃바운드 메시지를 Http 서비스로 보낼 수 있는 메시징 작업 집합을 제공합니다.일반적으로 각 작업은 하나의 Http 동사를 나타냅니다.이 항목에서는 이러한 작업에 대해 간략하게 설명합니다.

이 항목의 내용

  • Http 작업의 공통 속성

  • Http 작업

    • 요청 및 응답 콘텐츠 지정

    • DynamicValue의 Http 헤더

Http 작업의 공통 속성

Http 작업의 인수는 매우 비슷하지만 작업에 캡슐화되어 있는 특정 Http 작업의 내용에 따라 다릅니다.각 작업의 인수를 통해 Http 서비스를 호출하는데 필요한 다음과 같은 핵심 매개 변수 집합을 지정할 수 있습니다.

  • 서비스의 URI

  • 요청의 헤더와 콘텐츠

  • 응답의 헤더와 콘텐츠

  • 반환 상태 코드

  • 안전한 호출을 위한 보안 토큰

다음 표에는 모든 Http 작업 전반에 공통으로 사용되는 속성 및 인수가 나열되어 있습니다.

속성

설명

InArgument<string> Uri

요청의 URI입니다.

InArgument<DynamicValue> RequestHeaders

요청 메시지의 Http 헤더입니다.

InArgument<SecurityToken> SecurityToken

GetS2SSecurityToken 작업을 사용하여 클레임 기반 위임 패턴을 사용하도록 설정합니다.

참고: 이 속성은 Http 작업이 JsonWebToken(JWT) 및 OAuth2 전달자 토큰을 사용하도록 구성하므로, 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 서비스로 보낼 수 있는 메시징 작업 집합을 제공합니다.일반적으로 각 작업은 하나의 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
        }
    }
};

참고

Http 작업에 대한 DynamicValue 통합은 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,
        },
    }
};