Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med Dapr anropa utdatabindningen kan du anropa ett annat Dapr-program under en funktionskörning.
Information om installation och konfiguration av Dapr-tillägget finns i översikten över Dapr-tillägget.
Example
En C#-funktion kan skapas med något av följande C#-lägen:
| Execution model | Description | 
|---|---|
| Isolerad arbetsmodell | Funktionskoden körs i en separat .NET-arbetsprocess. Använd med versioner av .NET och .NET Framework som stöds. Mer information finns i Guide för att köra C# Azure Functions i den isolerade arbetsmodellen. | 
| In-process model | Funktionskoden körs i samma process som värdprocessen för Functions. Stöder endast LTS-versioner (Long Term Support) av .NET. Mer information finns i Utveckla C#-klassbiblioteksfunktioner med Hjälp av Azure Functions. | 
I följande exempel visas hur du använder en Dapr-anropa utdatabindning för att utföra en anropsåtgärd för Dapr-tjänsten som finns i ett annat Dapr-iserat program. I det här exemplet fungerar funktionen som en proxy.
[FunctionName("InvokeOutputBinding")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "invoke/{appId}/{methodName}")] HttpRequest req,
    [DaprInvoke(AppId = "{appId}", MethodName = "{methodName}", HttpVerb = "post")] IAsyncCollector<InvokeMethodParameters> output,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    var outputContent = new InvokeMethodParameters
    {
        Body = requestBody
    };
    await output.AddAsync(outputContent);
    return new OkResult();
}
I följande exempel skapas en "InvokeOutputBinding" funktion med bindningen DaprInvokeOutput med en HttpTrigger:
@FunctionName("InvokeOutputBinding")
public String run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET, HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "invoke/{appId}/{methodName}")
            HttpRequestMessage<Optional<String>> request,
        @DaprInvokeOutput(
            appId = "{appId}", 
            methodName = "{methodName}", 
            httpVerb = "post")
        OutputBinding<String> payload,
        final ExecutionContext context)
I följande exempel parkopplas Dapr-utdatabindningen med en HTTP-utlösare som registreras av app objektet:
const { app, trigger } = require('@azure/functions');
app.generic('InvokeOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "invoke/{appId}/{methodName}",
        name: "req"
    }),
    return: daprInvokeOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");
        const payload = await request.text();
        context.log(JSON.stringify(payload));
        return { body: 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 daprInvoke:
{
  "bindings":
    {
      "type": "daprInvoke",
      "direction": "out",
      "appId": "{appId}",
      "methodName": "{methodName}",
      "httpVerb": "post",
      "name": "payload"
    }
}
For more information about function.json file properties, see the Configuration section.
In code:
using namespace System.Net
# Input bindings are passed in via param block.
param($req, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "Powershell InvokeOutputBinding processed a request."
$req_body = $req.Body
$invoke_output_binding_req_body = @{
    "body" = $req_body
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name payload -Value $invoke_output_binding_req_body
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})
I följande exempel visas en Dapr Invoke-utdatabindning som använder programmeringsmodellen v2 Python. Så här använder daprInvoke du i din Python-funktionsappkod:
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="InvokeOutputBinding")
@app.route(route="invoke/{appId}/{methodName}", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_invoke_output(arg_name = "payload", app_id = "{appId}", method_name = "{methodName}", http_verb = "post")
def main(req: func.HttpRequest, payload: func.Out[str] ) -> str:
    # request body must be passed this way "{\"body\":{\"value\":{\"key\":\"some value\"}}}" to use the InvokeOutputBinding, all the data must be enclosed in body property.
    logging.info('Python function processed a InvokeOutputBinding request from the Dapr Runtime.')
    body = req.get_body()
    logging.info(body)
    if body is not None:
        payload.set(body)
    else:
        logging.info('req body is none')
    return 'ok'
Attributes
In the in-process model, use the DaprInvoke attribute to define a Dapr invoke output binding, which supports these parameters:
| Parameter | Description | Kan skickas via attribut | Kan skickas via RequestBody | 
|---|---|---|---|
| AppId | Dapr-app-ID:t som ska anropas. | ✔️ | ✔️ | 
| MethodName | Metodnamnet på den app som ska anropas. | ✔️ | ✔️ | 
| HttpVerb | Optional. HTTP-verb som ska användas av appen för att anropa. Standard är POST. | ✔️ | ✔️ | 
| Body | Required. Brödtexten i begäran. | ❌ | ✔️ | 
Annotations
Med anteckningen DaprInvokeOutput kan du låta funktionen anropa och lyssna på en utdatabindning.
| Element | Description | Kan skickas via attribut | Kan skickas via RequestBody | 
|---|---|---|---|
| appId | App-ID:t för programmet som ingår i anropa-bindningen. | ✔️ | ✔️ | 
| methodName | Namnet på metodvariabeln. | ✔️ | ✔️ | 
| httpVerb | Publicera eller hämta. | ✔️ | ✔️ | 
| body | Required. Brödtexten i begäran. | ❌ | ✔️ | 
Configuration
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i koden.
| Property | Description | Kan skickas via attribut | Kan skickas via RequestBody | 
|---|---|---|---|
| appId | App-ID:t för programmet som ingår i anropa-bindningen. | ✔️ | ✔️ | 
| methods | Publicera eller hämta. | ✔️ | ✔️ | 
| body | Required. Brödtexten i begäran. | ❌ | ✔️ | 
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i function.json-filen.
| function.json property | Description | Kan skickas via attribut | Kan skickas via RequestBody | 
|---|---|---|---|
| appId | App-ID:t för programmet som ingår i anropa-bindningen. | ✔️ | ✔️ | 
| methodName | Namnet på metodvariabeln. | ✔️ | ✔️ | 
| httpVerb | Publicera eller hämta. | ✔️ | ✔️ | 
| body | Required. Brödtexten i begäran. | ❌ | ✔️ | 
I följande tabell beskrivs bindningskonfigurationsegenskaperna för @dapp.dapr_invoke_output som du anger i Python-koden.
| Property | Description | Kan skickas via attribut | Kan skickas via RequestBody | 
|---|---|---|---|
| app_id | App-ID:t för programmet som ingår i anropa-bindningen. | ✔️ | ✔️ | 
| method_name | Namnet på metodvariabeln. | ✔️ | ✔️ | 
| http_verb | Ange till postellerget. | ✔️ | ✔️ | 
| body | Required. Brödtexten i begäran. | ❌ | ✔️ | 
Om egenskaper definieras i både Attribut och RequestBodyges prioritet till data som anges i RequestBody.
See the Example section for complete examples.
Usage
Om du vill använda Utdatabindningen för Dapr-tjänsten kan du läsa mer om hur du använder Dapr-tjänstanrop i den officiella Dapr-dokumentationen.
Om du vill använda daprInvoke i Python v2 konfigurerar du projektet med rätt beroenden.
- requirements.textLägg till följande rad i filen:- azure-functions==1.18.0b3
- Installera Python-biblioteket i terminalen. - pip install -r .\requirements.txt
- local.setting.jsonÄndra filen med följande konfiguration:- "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1