SignalR Service-triggerbinding voor Azure Functions

Gebruik de SignalR-triggerbinding om te reageren op berichten die zijn verzonden vanuit Azure SignalR Service. Wanneer de functie wordt geactiveerd, worden berichten die aan de functie worden doorgegeven, geparseerd als een json-object.

In de serverloze signalR-modus gebruikt SignalR Service de functie Upstream om berichten van client naar functie-app te verzenden. En functie-app maakt gebruik van signalR Service-triggerbinding om deze berichten te verwerken. De algemene architectuur wordt hieronder weergegeven:

SignalR-triggerarchitectuur

Zie het overzicht voor informatie over het instellen en configureren van details.

Opmerking

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

  • Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework.
  • In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime.
  • C#-script: wordt voornamelijk gebruikt wanneer u C#-functies maakt in Azure Portal.

In het volgende voorbeeld ziet u een C#-functie die een berichtgebeurtenis van clients ontvangt en de inhoud van het bericht registreert.

[Function(nameof(OnClientMessage))]
public static void OnClientMessage(
    [SignalRTrigger("Hub", "messages", "sendMessage", "content", ConnectionStringSetting = "SignalRConnection")]
        SignalRInvocationContext invocationContext, string content, FunctionContext functionContext)
{
    var logger = functionContext.GetLogger(nameof(OnClientMessage));
    logger.LogInformation("Connection {connectionId} sent a message. Message content: {content}", invocationContext.ConnectionId, content);
}

Belangrijk

Het klassemodel van SignalR Service-bindingen in een geïsoleerde C#-werkrol optimaliseert niet de wijze waarop u SignalR-triggers schrijft vanwege de beperking van het C#-werkrolmodel. Zie Het model op basis van klasse voor meer informatie over het model op basis van klassen.

SignalR-trigger wordt momenteel niet ondersteund voor Java.

Dit zijn bindingsgegevens in het function.json-bestand :

{
    "type": "signalRTrigger",
    "name": "invocation",
    "hubName": "hubName1",
    "category": "messages",
    "event": "SendMessage",
    "parameterNames": [
        "message"
    ],
    "direction": "in"
}
app.generic("function1",
    {
        trigger: { "type": "signalRTrigger", "name": "invocation", "direction": "in", "hubName": "hubName1", "event": "SendMessage", "category": "messages" },
        handler: (triggerInput, context) => {
            context.log(`Receive ${context.Arguments[0]} from ${triggerInput.ConnectionId}.`)
        }
    })

Volledige PowerShell-voorbeelden zijn in behandeling.

Dit is de Python-code:

import logging
import json
import azure.functions as func

def main(invocation) -> None:
    invocation_json = json.loads(invocation)
    logging.info("Receive {0} from {1}".format(invocation_json['Arguments'][0], invocation_json['ConnectionId']))

Kenmerken

Zowel in-processals geïsoleerde werkproces C#-bibliotheken gebruiken het SignalRTrigger kenmerk om de functie te definiëren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand.

In de volgende tabel worden de eigenschappen van het SignalRTrigger kenmerk uitgelegd.

Kenmerkeigenschap Beschrijving
HubName Deze waarde moet worden ingesteld op de naam van de SignalR-hub om de functie te activeren.
Categorie Deze waarde moet worden ingesteld als de categorie berichten die moeten worden geactiveerd voor de functie. De categorie kan een van de volgende waarden zijn:
  • verbindingen: verbonden en niet-verbonden gebeurtenissen opnemen
  • berichten: Inclusief alle andere gebeurtenissen, met uitzondering van gebeurtenissen in de categorie Verbindingen
Gebeurtenis Deze waarde moet worden ingesteld als de gebeurtenis van berichten die moeten worden geactiveerd voor de functie. Voor de berichtencategorie is gebeurtenis het doel in het aanroepbericht dat clients verzenden. Voor de categorie Verbindingen wordt alleen verbinding en verbinding verbroken gebruikt.
ParameterNames (Optioneel) Een lijst met namen die aan de parameters worden gekoppeld.
Verbinding maken ionStringSetting De naam van de app-instelling die de SignalR Service-verbindingsreeks bevat, die standaard wordt gebruiktAzureSignalRConnectionString.

Aantekeningen

Er is momenteel geen ondersteunde Java-aantekening voor een SignalR-trigger.

Configuratie

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json-eigenschap Beschrijving
type Moet worden ingesteld op SignalRTrigger.
direction Moet worden ingesteld op in.
name Variabelenaam die wordt gebruikt in functiecode voor contextobject voor trigger-aanroep.
hubName Deze waarde moet worden ingesteld op de naam van de SignalR-hub om de functie te activeren.
category Deze waarde moet worden ingesteld als de categorie berichten die moeten worden geactiveerd voor de functie. De categorie kan een van de volgende waarden zijn:
  • verbindingen: verbonden en niet-verbonden gebeurtenissen opnemen
  • berichten: Inclusief alle andere gebeurtenissen, met uitzondering van gebeurtenissen in de categorie Verbindingen
Gebeurtenis Deze waarde moet worden ingesteld als de gebeurtenis van berichten die moeten worden geactiveerd voor de functie. Voor de berichtencategorie is gebeurtenis het doel in het aanroepbericht dat clients verzenden. Voor de categorie Verbindingen wordt alleen verbinding en verbinding verbroken gebruikt.
parameterNames (Optioneel) Een lijst met namen die aan de parameters worden gekoppeld.
connectionStringSetting De naam van de app-instelling die de SignalR Service-verbindingsreeks bevat, die standaard wordt gebruiktAzureSignalRConnectionString.

Zie de sectie Voorbeeld voor volledige voorbeelden.

Gebruik

Payloads

Het invoertype trigger wordt gedeclareerd als een InvocationContext aangepast type. Als u kiest InvocationContext, krijgt u volledige toegang tot de aanvraaginhoud. Voor een aangepast type probeert de runtime de hoofdtekst van de JSON-aanvraag te parseren om de objecteigenschappen in te stellen.

InvocationContext

InvocationContext bevat alle inhoud in het bericht dat is verzonden vanuit een SignalR-service, die de volgende eigenschappen bevat:

Eigenschappen Beschrijving
Argumenten Beschikbaar voor de categorie Berichten . Bevat argumenten in aanroepbericht
Error Beschikbaar voor niet-verbonden gebeurtenis. Deze kan leeg zijn als de verbinding zonder fout is gesloten of als deze de foutberichten bevat.
Hub De hubnaam waartoe het bericht behoort.
Categorie De categorie van het bericht.
Gebeurtenis De gebeurtenis van het bericht.
ConnectionId De verbindings-id van de client die het bericht verzendt.
Gebruikers-id De gebruikersidentiteit van de client die het bericht verzendt.
Kopteksten De headers van de aanvraag.
Query De query van de aanvraag wanneer clients verbinding maken met de service.
Claims De claims van de client.

ParameterNames gebruiken

Met de eigenschap ParameterNames in SignalRTrigger kunt u argumenten van aanroepberichten binden aan de parameters van functies. U kunt de naam die u hebt gedefinieerd als onderdeel van bindingexpressies in andere bindingen of als parameters in uw code gebruiken. Dat geeft u een handigere manier om toegang te krijgen tot argumenten van InvocationContext.

Stel dat u een JavaScript SignalR-client hebt die een methode broadcast probeert aan te roepen in Azure Function met twee argumenten message1, message2.

await connection.invoke("broadcast", message1, message2);

Nadat u hebt ingesteld parameterNames, komen de namen die u hebt gedefinieerd overeen met de argumenten die aan de clientzijde worden verzonden.

[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]

Vervolgens bevat de arg1 inhoud van message1, en arg2 bevat de inhoud van message2.

ParameterNames Overwegingen

Voor de parameterbinding is de volgorde van belang. Als u gebruikt ParameterNames, komt de volgorde overeen ParameterNames met de volgorde van de argumenten die u in de client aanroept. Als u het kenmerk [SignalRParameter] in C# gebruikt, komt de volgorde van argumenten in Azure Function-methoden overeen met de volgorde van argumenten in clients.

ParameterNames en kenmerk [SignalRParameter]kan niet tegelijkertijd worden gebruikt, of u krijgt een uitzondering.

SignalR Service-integratie

SignalR Service heeft een URL nodig voor toegang tot de functie-app wanneer u signalR Service-triggerbinding gebruikt. De URL moet worden geconfigureerd in Upstream Instellingen aan de zijde van signalR Service.

Upstream-portal

Wanneer u SignalR Service-trigger gebruikt, kan de URL eenvoudig en als volgt worden opgemaakt:

<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>

U Function_App_URL vindt deze op de overzichtspagina van de functie-app en de API_KEY functie wordt gegenereerd door Azure Function. U kunt de API_KEY app signalr_extension ophalen op de blade App-sleutels van functie-app. API key

Als u meer dan één functie-app wilt gebruiken in combinatie met één SignalR Service, kan upstream ook complexe routeringsregels ondersteunen. Meer informatie vindt u in Upstream-instellingen.

Stapsgewijze voorbeeld

U kunt het voorbeeld in GitHub volgen om een chatruimte te implementeren in functie-app met de triggerbinding van SignalR Service en de upstream-functie: voorbeeld van bidirectionele chatruimte

Volgende stappen