Attività HTTP di Gestione flusso di lavoro 1.0

 

Progettazione flussi di lavoro 1.0 fornisce un set di attività di messaggistica che consentono l'invio di messaggi in uscita ai servizi HTTP.In generale, ogni attività rappresenta un singolo verbo HTTP.Di seguito viene presentata una panoramica di queste attività.

Gli argomenti delle attività HTTP sono molto simili, ma variano in base agli elementi pertinenti per la specifica operazione HTTP incapsulata dall'attività.Gli argomenti di ciascuna attività consentono di specificare il set principale di parametri da impostare per richiamare un servizio HTTP, ad esempio:

  • URI del servizio

  • Intestazioni di richiesta e contenuto

  • Intestazioni di risposta e contenuto

  • Codice dello stato di ritorno

  • Token di sicurezza per chiamate protette

Nella tabella seguente sono elencati gli argomenti e le proprietà comuni a tutte le attività HTTP.

Proprietà

Descrizione

InArgument<string> Uri

URI della richiesta.

InArgument<DynamicValue> RequestHeaders

Intestazioni HTTP del messaggio di richiesta.

InArgument<SecurityToken> SecurityToken

Abilita un modello di delega basato su attestazioni mediante l'attività GetS2SSecurityToken.

Nota: questo token configura l'attività HTTP per l'utilizzo dei token di connessione JsonWebTokens (JWT) e OAuth2 e come tale può essere usato soltanto all'interno di flussi di lavoro che fanno parte di un ambito protetto mediante S2S.Vengono usate le attestazioni del chiamante che crea il flusso di lavoro, ad esempio il messaggio di attivazione, e il token in uscita viene firmato mediante il certificato di firma in uscita configurato per la distribuzione.

bool RetryOnConnectionFailure

Abilita la ripetizione automatica delle richieste non riuscite a causa del timeout o della perdita di connessione mediante un backoff esponenziale.

ActivityFunc<HttpStatusCode, DynamicValue, DynamicValue, bool> HttpErrorHandler

Abilita la gestione della logica di ripetizione in base a un determinato HttpStatusCode, alle intestazioni della risposta e al contenuto della risposta.

OutArgument<DynamicValue> ResponseHeaders

Intestazioni HTTP del messaggio di risposta.

OutArgument ResponseContent

Contenuti del corpo del messaggio di risposta.

OutArgument<HttpStatusCode> HttpStatusCode

HttpStatusCode del messaggio di risposta.

Progettazione flussi di lavoro 1.0 fornisce un set di attività di messaggistica che consentono l'invio di messaggi in uscita ai servizi HTTP.In generale, ogni attività rappresenta un singolo verbo HTTP.Nella tabella seguente sono elencate le attività HTTP disponibili in Progettazione flussi di lavoro 1.0.Tutte queste attività hanno il set comune di argomenti e proprietà illustrato in Proprietà comuni delle attività HTTP.Oltre a questi argomenti e proprietà comuni, alcune attività dispongono di argomenti aggiuntivi, come illustrato nella colonna Other Arguments.

Attività

Descrizione

Altri argomenti

HttpGet

GET su un servizio HTTP.

HttpPost

POST su un servizio HTTP.

InArgument RequestContent

HttpPut

PUT su un servizio HTTP.

InArgument RequestContent

HttpDelete

DELETE su un servizio HTTP.

HttpMerge

Intestazioni avanzate per l'esecuzione di un'operazione di aggiornamento mediante un eTag.

InArgument RequestContent

InArgument<String> Etag

Quando si fornisce il contenuto di richieste e risposte, è possibile passare un oggetto primitivo, quale una stringa, un numero o una data, che verrà serializzato come contenuto della richiesta. In alternativa, è possibile passare un'istanza di DynamicValue.

Le attività HTTP sono strettamente integrate con DynamicValue. Per le richieste, l'istanza di DynamicValue fornita verrà automaticamente serializzata nella relativa rappresentazione JSON e impostata come contenuto della richiesta per la chiamata HTTP.Per le risposte, il contenuto restituito dal server verrà caricato in un'istanza di DynamicValue. Questa operazione ha esito positivo solo se la risposta viene restituita in formato JSON valido.

Nell'esempio di codice seguente viene illustrato come usare HttpGet per ottenere informazioni da Netflix e trasferirle in un'istanza di DynamicValue e come usarne alcune proprietà all'interno di un'attività:

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
        }
    }
};
System_CAPS_noteNota

L'integrazione di DynamicValue con le attività HTTP è supportata dai servizi che accettano e restituiscono contenuto in formato JSON.AtomPub non è attualmente supportato nell'integrazione con DynamicValue.

Le intestazioni HTTP vengono specificate mediante un'istanza di DynamicValue.Per impostare le intestazioni per un'attività, è sufficiente creare e passare un'istanza di DynamicValue contenente le intestazioni da usare.

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 = "http://contoso.com?var1=val",
            RequestHeaders = requestHeaders,
            ResponseHeaders = responseHeaders,
        },
    }
};
Mostra: