web-dev-qa-db-fra.com

Comment envoyer des données à la rubrique Service Bus avec Azure Functions?

J'ai ici un déclencheur HTTP basé sur C # et je souhaite envoyer des données "Hello Name" au sujet Service Bus (déjà créé). Je code au portail.

Comment faire la liaison de sortie Service Bus?

Cela ne fonctionne pas. Une aide disponible?

-Référence manquante pour la gestion de Service Bus?

-Comment définir la connexion du bus de service? Où est Functions.json

-Comment envoyer un message au service bus?

//This FunctionApp get triggered by HTTP and send message to Azure Service Bus

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Company.Function

{
    public static class HttpTriggerCSharp1
{
    [FunctionName("HttpTriggerCSharp1")]
    [return: ServiceBus("myqueue", Connection = "ServiceBusConnection")] // I added this for SB Output. Where to define.

    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)

    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        string name = req.Query["name"];
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;
        string responseMessage = string.IsNullOrEmpty(name)
            ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
            : $"Hello, {name}. This HTTP triggered function executed successfully.";
        return new OkObjectResult(responseMessage);
        // I added this for SB Output
        return responseMessage;
    }
}

}

4
Kenny_I

Assurez-vous d'installer d'abord Microsoft.Azure.WebJobs.Extensions.ServiceBus Package NuGet. Assurez-vous ensuite de l'utiliser dans votre projet:

using Microsoft.Azure.WebJobs.Extensions.ServiceBus;

Assurez-vous de nettoyer et de générer le projet pour vous assurer qu'il n'y a pas d'erreur.

Ensuite, vous devez vous assurer que vous avez un "ServiceBusConnection" chaîne de connexion dans votre local.settings.json fichier:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "ServiceBusConnection": "Endpoint=sb://...",
  }
}

Ce que vous pouvez obtenir si vous accédez au portail Azure -> Espace de noms du bus de service -> Stratégies d'accès partagé -> RootManageSharedAccessKey -> Chaîne de connexion principale . Copiez et collez cette chaîne de connexion dans "ServiceBusConnection". Vous pouvez également utiliser la chaîne de connexion secondaire .

Remarque: Les files d'attente/sujets du bus de service ont également des politiques d'accès partagé. Ainsi, si vous ne souhaitez pas utiliser les stratégies d'accès au niveau de l'espace de noms Service bus, vous pouvez en créer une au niveau de la file d'attente/de la rubrique, de sorte que votre application de fonction ait uniquement accès à la file d'attente/à la rubrique définie dans votre espace de noms.

De plus, si vous décidez de publier votre application de fonction, vous devrez vous assurer de créer un paramètre d'application de configuration pour "ServiceBusConnection", puisque local.settings.json n'est utilisé que pour les tests locaux.

1
RoadRunner