Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La liaison d’appel dapr vous permet d’appeler une autre application Dapr pendant l’exécution d’une fonction.
Pour plus d’informations sur l’installation et la configuration de l’extension Dapr, consultez la vue d’ensemble de l’extension Dapr.
Example
Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :
| Execution model | Description |
|---|---|
| Modèle de travailleur isolé | Le code de votre fonction s’exécute dans un processus Worker .NET distinct. Utilisez avec les versions prises en charge de .NET et .NET Framework. Pour plus d’informations, consultez Guide d’exécution de C# Azure Functions dans le modèle worker isolé. |
| In-process model | Le code de votre fonction s’exécute dans le même processus que le processus hôte Functions. Prend uniquement en charge les versions LTS (Long Term Support) de .NET. Pour en découvrir plus, consultez Développer des fonctions de bibliothèque de classes C# à l’aide d’Azure Functions. |
L’exemple suivant illustre l’utilisation d’une liaison de sortie d’appel Dapr pour effectuer une opération d’appel de service Dapr hébergée dans une autre application daprisée. Dans cet exemple, la fonction agit comme un 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();
}
L’exemple suivant crée une "InvokeOutputBinding" fonction à l’aide de la DaprInvokeOutput liaison avec un 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)
Dans l’exemple suivant, la liaison de sortie d’appel Dapr est associée à un déclencheur HTTP, qui est inscrit par l’objet app :
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
})
L’exemple suivant montre une liaison de sortie Dapr Invoke, qui utilise le modèle de programmation Python v2. Pour utiliser daprInvoke dans le code de votre application de fonction Python :
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 | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
|---|---|---|---|
| AppId | ID d’application Dapr à appeler. | ✔️ | ✔️ |
| MethodName | Nom de méthode de l’application à appeler. | ✔️ | ✔️ |
| HttpVerb | Optional. Verbe HTTP à utiliser de l’application pour appeler. La valeur par défaut est POST. |
✔️ | ✔️ |
| Body | Required. Corps de la requête. | ❌ | ✔️ |
Annotations
L’annotation DaprInvokeOutput vous permet d’appeler votre fonction et d’écouter une liaison de sortie.
| Element | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
|---|---|---|---|
| appId | ID d’application de l’application impliquée dans la liaison d’appel. | ✔️ | ✔️ |
| methodName | Nom de la variable de méthode. | ✔️ | ✔️ |
| httpVerb | Publier ou obtenir. | ✔️ | ✔️ |
| body | Required. Corps de la requête. | ❌ | ✔️ |
Configuration
Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le code.
| Property | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
|---|---|---|---|
| appId | ID d’application de l’application impliquée dans la liaison d’appel. | ✔️ | ✔️ |
| methods | Publier ou obtenir. | ✔️ | ✔️ |
| body | Required. Corps de la requête. | ❌ | ✔️ |
Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json.
| function.json property | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
|---|---|---|---|
| appId | ID d’application de l’application impliquée dans la liaison d’appel. | ✔️ | ✔️ |
| methodName | Nom de la variable de méthode. | ✔️ | ✔️ |
| httpVerb | Publier ou obtenir. | ✔️ | ✔️ |
| body | Required. Corps de la requête. | ❌ | ✔️ |
Le tableau suivant explique les propriétés de configuration de liaison pour @dapp.dapr_invoke_output que vous définissez dans votre code Python.
| Property | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
|---|---|---|---|
| app_id | ID d’application de l’application impliquée dans la liaison d’appel. | ✔️ | ✔️ |
| method_name | Nom de la variable de méthode. | ✔️ | ✔️ |
| http_verb | Définissez post sur get. |
✔️ | ✔️ |
| body | Required. Corps de la requête. | ❌ | ✔️ |
Si les propriétés sont définies dans les attributs et RequestBody, la priorité est attribuée aux données fournies dans RequestBody.
See the Example section for complete examples.
Usage
Pour utiliser la liaison de sortie d’appel du service Dapr, apprenez-en davantage sur l’utilisation de l’appel de service Dapr dans la documentation officielle de Dapr.
Pour utiliser daprInvoke dans Python v2, configurez votre projet avec les dépendances appropriées.
Dans votre fichier
requirements.text, ajoutez la ligne suivante :azure-functions==1.18.0b3Dans le terminal, installez la bibliothèque Python.
pip install -r .\requirements.txtModifiez votre fichier
local.setting.jsonavec la configuration suivante :"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1