Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit der Dapr-Ausgabebindung können Sie während einer Funktionsausführung eine andere Dapr-Anwendung aufrufen.
Informationen zu Setup- und Konfigurationsdetails der Dapr-Erweiterung finden Sie in der Dapr-Erweiterungsübersicht.
Example
Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:
| Execution model | Description |
|---|---|
| Isoliertes Workermodell | Ihr Funktionscode wird in einem separaten .NET-Workerprozess ausgeführt. Verwenden Sie dazu unterstützte Versionen von .NET und .NET Framework. Weitere Informationen finden Sie im Handbuch zum Ausführen von C#-Azure-Funktionen im isolierten Arbeitsmodell. |
| In-process model | Ihr Funktionscode wird im gleichen Prozess wie der Functions-Hostprozess ausgeführt. Unterstützt nur LTS-Versionen (Long Term Support) von .NET. Weitere Informationen finden Sie unter Entwickeln von C#-Klassenbibliotheksfunktionen mithilfe von Azure Functions. |
Das folgende Beispiel veranschaulicht die Verwendung einer Dapr-Aufrufausgabebindung zum Ausführen eines Aufrufvorgangs eines Dapr-Diensts, der in einer anderen dapr-isierten Anwendung gehostet wird. In diesem Beispiel fungiert die Funktion wie ein 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();
}
Im folgenden Beispiel wird eine "InvokeOutputBinding" Funktion mithilfe der DaprInvokeOutput Bindung mit einer 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)
Im folgenden Beispiel wird die Dapr-Ausgabebindung mit einem HTTP-Trigger gekoppelt, der app vom Objekt registriert wird:
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
})
Das folgende Beispiel zeigt eine Dapr Invoke-Ausgabebindung, die das v2 Python-Programmiermodell verwendet. So verwenden Sie daprInvoke in Ihrem Python-Funktions-App-Code:
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 | Kann per Attribut gesendet werden | Kann über RequestBody gesendet werden |
|---|---|---|---|
| AppId | Die zu aufrufende Dapr-App-ID. | ✔️ | ✔️ |
| MethodName | Der Methodenname der app, die aufgerufen werden soll. | ✔️ | ✔️ |
| HttpVerb | Optional. HTTP-Verb, das von der App aufgerufen werden soll. Der Standardwert ist POST. |
✔️ | ✔️ |
| Body | Required. Der Textkörper der Anforderung. | ❌ | ✔️ |
Annotations
Mit der DaprInvokeOutput Anmerkung können Sie ihre Funktion aufrufen und eine Ausgabebindung überwachen.
| Element | Description | Kann per Attribut gesendet werden | Kann über RequestBody gesendet werden |
|---|---|---|---|
| appId | Die App-ID der Anwendung, die an der Aufrufbindung beteiligt ist. | ✔️ | ✔️ |
| methodName | Der Name der Methodenvariable. | ✔️ | ✔️ |
| httpVerb | Posten oder abrufen. | ✔️ | ✔️ |
| body | Required. Der Textkörper der Anforderung. | ❌ | ✔️ |
Configuration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.
| Property | Description | Kann per Attribut gesendet werden | Kann über RequestBody gesendet werden |
|---|---|---|---|
| appId | Die App-ID der Anwendung, die an der Aufrufbindung beteiligt ist. | ✔️ | ✔️ |
| methods | Posten oder abrufen. | ✔️ | ✔️ |
| body | Required. Der Textkörper der Anforderung. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
| function.json property | Description | Kann per Attribut gesendet werden | Kann über RequestBody gesendet werden |
|---|---|---|---|
| appId | Die App-ID der Anwendung, die an der Aufrufbindung beteiligt ist. | ✔️ | ✔️ |
| methodName | Der Name der Methodenvariable. | ✔️ | ✔️ |
| httpVerb | Posten oder abrufen. | ✔️ | ✔️ |
| body | Required. Der Textkörper der Anforderung. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_invoke_output, die Sie im Python-Code festlegen.
| Property | Description | Kann per Attribut gesendet werden | Kann über RequestBody gesendet werden |
|---|---|---|---|
| app_id | Die App-ID der Anwendung, die an der Aufrufbindung beteiligt ist. | ✔️ | ✔️ |
| method_name | Der Name der Methodenvariable. | ✔️ | ✔️ |
| http_verb | Wird auf post oder get festgelegt. |
✔️ | ✔️ |
| body | Required. Der Textkörper der Anforderung. | ❌ | ✔️ |
Wenn Eigenschaften sowohl in Attributen als auch in RequestBody definiert sind, haben die in RequestBody bereitgestellten Daten höhere Priorität.
See the Example section for complete examples.
Usage
Wenn Sie die Ausgabebindung des Dapr-Diensts verwenden möchten, erfahren Sie mehr über die Verwendung des Dapr-Dienstaufrufs in der offiziellen Dapr-Dokumentation.
Um daprInvoke in Python v2 zu verwenden, richten Sie Ihr Projekt mit den richtigen Abhängigkeiten ein.
Fügen Sie in Ihrer
requirements.text-Datei die folgende Zeile hinzu:azure-functions==1.18.0b3Installieren Sie im Terminal die Python-Bibliothek.
pip install -r .\requirements.txtÄndern Sie ihre
local.setting.json-Datei mit der folgenden Konfiguration:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1