2

Ist es möglich anzugeben, dass DocumentDB Auslöser beim Schreiben in DocumentDB auslöst?Azure-Funktionen und DocumentDB-Trigger

Ich habe eine Azure-Funktion, die JSON-Nachrichten aus einem Service Bus Queue zieht und setzt sie in DocumentDB wie so:

using System; 
using System.Threading.Tasks; 

public static string Run(string myQueueItem, TraceWriter log) 
{ 
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}"); 

    return myQueueItem; 
} 

Dies fügt neue Dokumente in die Datenbank, wie sie an den Servicebus Warteschlange hinzugefügt werden, Ich benötige jedoch DocumentDB, um diese zu verarbeiten, wenn sie hinzugefügt werden, und Anhänge hinzuzufügen. Dies kann im vorliegenden Setup nicht durchgeführt werden und ich möchte DocumentDB anweisen, einen Trigger auszulösen.

ich so etwas wie dies versucht haben:

using System; 
using System.Threading.Tasks; 

public static string Run(string myQueueItem, TraceWriter log) 
{ 
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}"); 

    return "x-ms-documentdb-post-trigger-include: addDocument\n" + myQueueItem; 
} 

Es funktioniert nicht und gibt mir Fehler wie folgt aus:

Ausnahme beim Funktion ausführt: Functions.ServiceBusQueueTriggerCSharp1. Microsoft.Azure.WebJobs.Host: Fehler bei der Verarbeitung des Parameters _return after function returned :. Newtonsoft.Json: Beim Parsen des Werts wurde ein unerwartetes Zeichen festgestellt: x. Pfad ‚‘, Zeile 0, Position 0.

Ich mag diese Einstellung, weil ich die Warteschlange mit Anfragen sättigen können Datensätze hinzufügen und sie puffern nur, bis die Datenbank damit umgehen können, die mit Nachfragespitzen beschäftigt, aber es erlaubt das Daten-Offloading vom Client-Rechner so schnell wie das Netzwerk es transportieren kann und dann wird die Warteschlange/Datenbank-Kombination eingeholt, wenn die Nachfrage wieder abfällt.

Antwort

2

Sie können das folgende Codebeispiel verwenden, um ein Dokument mit aktiviertem Trigger in Azure-Funktionen zu erstellen.

using System; 
using System.Threading.Tasks; 
using Microsoft.Azure.Documents; 
using Microsoft.Azure.Documents.Client; 

public static void Run(string myQueueItem, TraceWriter log) 
{ 
    string EndpointUri = "https://{documentdb account name}.documents.azure.com:443/"; 
    string PrimaryKey = "{PrimaryKey}"; 

    DocumentClient client = new DocumentClient(new Uri(EndpointUri), PrimaryKey); 

    client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("{databaseid}", "{collenctionid}"), new MyChunk { MyProperty = "hello" }, 
       new RequestOptions 
       { 
        PreTriggerInclude = new List<string> { "YourTriggerName" }, 
       }).Wait(); 

    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}"); 
} 

public class MyChunk 
{ 
    public string MyProperty { get; set; } 
} 

Hinweis: für Microsoft.Azure.DocumentDB NuGet Paket in einer C# Funktion, bitte upload a project.json file to the function's folder in dem Dateisystem des Funktions App.

project.json

{ 
    "frameworks": { 
    "net46":{ 
     "dependencies": { 
     "Microsoft.Azure.DocumentDB": "1.13.1" 
     } 
    } 
    } 
} 

Außerdem stellen Sie Sie bitte Auslöser in Ihrem DocumentDB erstellt haben, für weitere Details über Trigger erstellen, finden Sie in this article.