Eventi
Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'associazione di output dello stato dapr consente di salvare un valore in uno stato Dapr durante l'esecuzione di una funzione.
Per informazioni sull'installazione e sulla configurazione dell'estensione Dapr, vedere panoramica dell'estensione Dapr.
È possibile creare una funzione C# usando una delle modalità C# seguenti:
Execution model | Description |
---|---|
Modello di lavoro isolato | Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con le versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Guida per l'esecuzione di Funzioni di Azure C# nel modello di lavoro isolato. |
In-process model | Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo versioni LTS (Long Term Support) di .NET. Per altre informazioni, vedere Sviluppare funzioni della libreria di classi C# usando Funzioni di Azure. |
Nell'esempio seguente viene illustrato l'uso dell'associazione di output dello stato dapr per rendere persistente un nuovo stato nell'archivio stati.
[FunctionName("StateOutputBinding")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "state/{key}")] HttpRequest req,
[DaprState("statestore", Key = "{key}")] IAsyncCollector<string> state,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
await state.AddAsync(requestBody);
return new OkResult();
}
Nell'esempio seguente viene creata una "CreateNewOrderHttpTrigger"
funzione usando l'associazione DaprStateOutput
con un oggetto HttpTrigger
:
@FunctionName("CreateNewOrderHttpTrigger")
public String run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@DaprStateOutput(
stateStore = "%StateStoreName%",
key = "product")
OutputBinding<String> product,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger (CreateNewOrderHttpTrigger) processed a request.");
}
Nell'esempio seguente, l'associazione di output dello stato dapr viene associata a un trigger HTTP, registrato dall'oggetto app
:
const { app, trigger } = require('@azure/functions');
app.generic('StateOutputBinding', {
trigger: trigger.generic({
type: 'httpTrigger',
authLevel: 'anonymous',
methods: ['POST'],
route: "state/{key}",
name: "req"
}),
return: daprStateOutput,
handler: async (request, context) => {
context.log("Node HTTP trigger function processed a request.");
const payload = await request.text();
context.log(JSON.stringify(payload));
return { value : payload };
}
});
The following examples show Dapr triggers in a function.json file and PowerShell code that uses those bindings.
Here's the function.json file for daprState
output:
{
"bindings":
{
"type": "daprState",
"stateStore": "%StateStoreName%",
"direction": "out",
"name": "order",
"key": "order"
}
}
For more information about function.json file properties, see the Configuration section.
In code:
using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq
param (
$payload
)
# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a CreateNewOrder request from the Dapr Runtime."
# Payload must be of the format { "data": { "value": "some value" } }
# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $payload| ConvertTo-Json
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]
L'esempio seguente mostra un'associazione di output dapr State, che usa il modello di programmazione Python v2. Per usare daprState
nel codice dell'app per le funzioni Python:
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="HttpTriggerFunc")
@app.route(route="req", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_state_output(arg_name="state", state_store="statestore", key="newOrder")
def main(req: func.HttpRequest, state: func.Out[str] ) -> str:
# request body must be passed this way '{\"value\": { \"key\": \"some value\" } }'
body = req.get_body()
if body is not None:
state.set(body.decode('utf-8'))
logging.info(body.decode('utf-8'))
else:
logging.info('req body is none')
return 'ok'
In the in-process model, use the DaprState
to define a Dapr state output binding, which supports these parameters:
Parameter | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
---|---|---|---|
StateStore | Nome dell'archivio stati per salvare lo stato. | ✔️ | ❌ |
Key | Nome della chiave per salvare lo stato all'interno dell'archivio stati. | ✔️ | ✔️ |
Value | Required. Valore archiviato. | ❌ | ✔️ |
L'annotazione DaprStateOutput
consente di accedere a un archivio stati.
Element | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
---|---|---|---|
stateStore | Nome dell'archivio stati per salvare lo stato. | ✔️ | ❌ |
key | Nome della chiave per salvare lo stato all'interno dell'archivio stati. | ✔️ | ✔️ |
value | Required. Valore archiviato. | ❌ | ✔️ |
Nella tabella seguente vengono illustrate le proprietà di configurazione dell'associazione impostate nel codice.
Property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
---|---|---|---|
stateStore | Nome dell'archivio stati per salvare lo stato. | ✔️ | ❌ |
key | Nome della chiave per salvare lo stato all'interno dell'archivio stati. | ✔️ | ✔️ |
value | Required. Valore archiviato. | ❌ | ✔️ |
The following table explains the binding configuration properties that you set in the function.json file.
function.json property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
---|---|---|---|
stateStore | Nome dell'archivio stati per salvare lo stato. | ✔️ | ❌ |
key | Nome della chiave per salvare lo stato all'interno dell'archivio stati. | ✔️ | ✔️ |
value | Required. Valore archiviato. | ❌ | ✔️ |
La tabella seguente illustra le proprietà di configurazione dell'associazione per @dapp.dapr_state_output
impostate nel codice Python.
Property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
---|---|---|---|
stateStore | Nome dell'archivio stati per salvare lo stato. | ✔️ | ❌ |
key | Nome della chiave per salvare lo stato all'interno dell'archivio stati. | ✔️ | ✔️ |
value | Required. Valore archiviato. | ❌ | ✔️ |
Se le proprietà sono definite sia in Attributi che in RequestBody
, la priorità viene assegnata ai dati forniti in RequestBody
.
See the Example section for complete examples.
Per usare l'associazione di output dello stato dapr, iniziare configurando un componente dell'archivio stati dapr. Per altre informazioni sul componente da usare e su come configurarlo, vedere la documentazione ufficiale di Dapr.
Per usare daprState
in Python v2, configurare il progetto con le dipendenze corrette.
Nel file
requirements.text
aggiungere la riga seguente:azure-functions==1.18.0b3
Nel terminale installare la libreria Python.
pip install -r .\requirements.txt
Modificare il file
local.setting.json
con la configurazione seguente:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1