Delen via


Dapr State-invoerbinding voor Azure Functions

Met de Dapr-statusinvoerbinding kunt u de status Dapr lezen tijdens het uitvoeren van een functie.

Zie het overzicht van de Dapr-extensie voor meer informatie over het instellen en configureren van de Dapr-extensie.

Example

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

Execution model Description
Geïsoleerde werkrolmodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie Handleiding voor het uitvoeren van C# Azure Functions in het geïsoleerde werkrolmodel voor meer informatie.
In-process model Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie C#-klassebibliotheekfuncties ontwikkelen met behulp van Azure Functions voor meer informatie.
[FunctionName("StateInputBinding")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] string state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    return new OkObjectResult(state);
}

In het volgende voorbeeld wordt een "RetrieveOrder" functie gemaakt met behulp van de DaprStateInput binding met de DaprServiceInvocationTrigger:

@FunctionName("RetrieveOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "RetrieveOrder") 
        String payload,
        @DaprStateInput(
            stateStore = "%StateStoreName%",
            key = "order")
        String product,
        final ExecutionContext context)

In het volgende voorbeeld wordt de Dapr-invoerbinding toegevoegd als een extraInput en gekoppeld aan een HTTP-trigger, die is geregistreerd door het app object:

const { app, trigger } = require('@azure/functions');

app.generic('StateInputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['GET'],
        route: "state/{key}",
        name: "req"
    }),
    extraInputs: [daprStateInput],
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const daprStateInputValue = context.extraInputs.get(daprStateInput);
        // print the fetched state value
        context.log(daprStateInputValue);

        return daprStateInputValue;
    }
});

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:

{
  "bindings": 
    {
      "type": "daprState",
      "direction": "in",
      "key": "order",
      "stateStore": "%StateStoreName%",
      "name": "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, $order
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a RetrieveOrder request from the Dapr Runtime."

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $order | ConvertTo-Json

Write-Host "$jsonString"

In het volgende voorbeeld ziet u een Dapr State-invoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. De binding naast de daprState code van uw Python-functie-app gebruikendaprServiceInvocationTrigger:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

Attributes

In the in-process model, use the DaprState to read Dapr state into your function, which supports these parameters:

Parameter Description
StateStore De naam van het statusarchief om de status op te halen.
Key De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

Annotations

Met de DaprStateInput aantekening kunt u de status Dapr in uw functie lezen.

Element Description
stateStore De naam van het dapr-statusarchief.
key De sleutelwaarde van het statusarchief.

Configuration

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in de code hebt ingesteld.

Property Description
stateStore De naam van het statusarchief.
key De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json property Description
key De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.
stateStore De naam van het statusarchief.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen @dapp.dapr_state_input uitgelegd die u in uw Python-code hebt ingesteld.

Property Description
state_store De naam van het statusarchief.
key De geheime sleutelwaarde. De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

See the Example section for complete examples.

Usage

Als u de Dapr-statusinvoerbinding wilt gebruiken, begint u met het instellen van een Dapr-statusarchiefonderdeel. Meer informatie over welk onderdeel u moet gebruiken en hoe u dit kunt instellen in de officiële Dapr-documentatie.

Als u het daprState project in Python v2 wilt gebruiken, stelt u uw project in met de juiste afhankelijkheden.

  1. Een virtuele omgeving maken en activeren

  2. Voeg in het requirements.text bestand de volgende regel toe:

    azure-functions==1.18.0b3
    
  3. Installeer de Python-bibliotheek in de terminal.

    pip install -r .\requirements.txt
    
  4. Wijzig uw local.setting.json bestand met de volgende configuratie:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Meer informatie over Statusbeheer van Dapr.