Share via


Azure Web PubSub-triggers en -bindingen voor Azure Functions

In deze verwijzing wordt uitgelegd hoe u Web PubSub-gebeurtenissen in Azure Functions kunt verwerken.

Web PubSub is een door Azure beheerde service waarmee ontwikkelaars eenvoudig webtoepassingen kunnen bouwen met realtime functies en een patroon publiceren-abonneren.

Handeling Typologie
Een functie uitvoeren wanneer berichten afkomstig zijn van de service Trigger binding
Aanvraag binden aan doelobject onder HTTP-trigger voor onderhandelings- en upstream-aanvragen Inputkoppeling
Serviceacties aanroepen Uitvoerbinding

Broncode | Pakket | API-referentiedocumentatie | Productdocumentatie | Voorbeelden

Toevoegen aan uw functie-app

Als u met de trigger en bindingen werkt, moet u verwijzen naar het juiste pakket. Het NuGet-pakket wordt gebruikt voor .NET-klassebibliotheken terwijl een uitbreidingsbundel wordt gebruikt voor alle andere toepassingstypen.

Taal Toevoegen door...
C# Installeer het NuGet-pakket, de specifieke doelversie
JavaScript, Python, PowerShell, C#-script (alleen Azure Portal) Uitbreidingsbundels ( aanbevolen) gebruiken, extensies expliciet installeren

Belangrijke concepten

Diagram van de werkstroom van de Azure Web PubSub-service die werkt met Function Apps.

(1)-(2) WebPubSubConnection invoerbinding met HttpTrigger om clientverbinding te genereren.

(3)-(4) WebPubSubTrigger Triggerbinding of WebPubSubContext Invoerbinding met HttpTrigger om serviceaanvragen te verwerken.

(5)-(6) WebPubSub uitvoerbinding om een serviceverzoek uit te voeren.

Triggerbinding

Gebruik de functietrigger om aanvragen van de Azure Web PubSub-service te verwerken.

WebPubSubTrigger wordt gebruikt wanneer u aanvragen van de servicezijde moet verwerken. Het eindpuntpatroon van de trigger is als volgt en moet worden ingesteld in de Web PubSub-service (Portal: instellingen -> gebeurtenishandler -> URL-sjabloon). In het eindpuntpatroon is het queryonderdeel code=<API_KEY> VEREIST wanneer u Azure Function App gebruikt om beveiligingsredenen. De sleutel vindt u in Azure Portal. Zoek uw functie-app-resource en navigeer naar Functies ->App-sleutels ->Systeemsleutels ->webpubsub_extension nadat u de functie-app naar Azure hebt geïmplementeerd. Deze sleutel is echter niet nodig wanneer u met lokale functies werkt.

<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>

Schermopname van functiesysteemsleutels ophalen.

Voorbeeld

[FunctionName("WebPubSubTrigger")]
public static void Run(
    [WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request, ILogger log)
{
    log.LogInformation($"Request from: {request.ConnectionContext.UserId}");
    log.LogInformation($"Request message data: {request.Data}");
    log.LogInformation($"Request message dataType: {request.DataType}");
}

WebPubSubTrigger binding ondersteunt ook retourwaarde in synchronisatiescenario's, bijvoorbeeld systeem Connect - en gebruikersbeurtenis, wanneer de server de clientaanvraag kan controleren en weigeren, of berichten rechtstreeks naar de beller kan verzenden. Connect gebeurtenis respecteert ConnectEventResponse en EventErrorResponse, en gebruikersgebeurtenis respecteert UserEventResponse en EventErrorResponse, resttypen die niet overeenkomen met het huidige scenario worden genegeerd. En als EventErrorResponse wordt geretourneerd, verbreekt de service de clientverbinding.

[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
    [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
    return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}

Kenmerken en aantekeningen

Gebruik het kenmerk in C#-klassebibliotheken.WebPubSubTrigger

Hier volgt een WebPubSubTrigger attribuut in een methodehandtekening:

[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")] 
    WebPubSubConnectionContext context, ILogger log)
{
    ...
}

Zie het C#-voorbeeld voor een volledig voorbeeld.

Configuratie

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

function.json-eigenschap Attribuuteigenschap Beschrijving
soort n.v.t. Vereist - moet worden ingesteld op webPubSubTrigger.
richting n.v.t. Vereist - moet worden ingesteld op in.
naam n.v.t. Vereist: de variabelenaam die wordt gebruikt in functiecode voor de parameter die de gebeurtenisgegevens ontvangt.
hub Knooppunt Vereist: de waarde moet worden ingesteld op de naam van de Web PubSub-hub om de functie te activeren. We ondersteunen het instellen van de waarde in kenmerk als hogere prioriteit, of deze kan worden ingesteld in app-instellingen als een globale waarde.
gebeurtenistype WebPubSubEventType Vereist: de waarde moet worden ingesteld als het gebeurtenistype van berichten om de functie te activeren. De waarde moet user of system zijn.
eventName Naam van het evenement Vereist: de waarde moet worden ingesteld als de gebeurtenis van berichten om de functie te activeren.
Voor system gebeurtenistype moet de naam van de gebeurtenis worden weergegeven in connect, connected, disconnected.
Voor door de gebruiker gedefinieerde subprotocollen is messagede gebeurtenisnaam .
Voor door het systeem ondersteunde subprotocol json.webpubsub.azure.v1.is de gebeurtenisnaam door de gebruiker gedefinieerde gebeurtenisnaam.
verbinding Verbinding Optioneel: de naam van een app-instellingen of verzameling die de upstream Azure Web PubSub-service aangeeft. De waarde wordt gebruikt voor handtekeningvalidatie. En de waarde wordt standaard automatisch bepaald met de app-instellingen "WebPubSubConnectionString". En null betekent dat de validatie niet nodig is en altijd slaagt.

Gebruik

In C# WebPubSubEventRequest is het type herkende bindingsparameter. Rest-parameters zijn afhankelijk van de parameternaam. Controleer de onderstaande tabel met beschikbare parameters en typen.

In een zwakgetypte taal zoals JavaScript, wordt name in function.json gebruikt om het triggerobject te koppelen aan de onderstaande mappingstabel. En respecteer dataType in function.json om het bericht dienovereenkomstig te converteren wanneer name als bindingsobject is ingesteld op data voor de triggerinvoer. Alle parameters kunnen worden gelezen uit context.bindingData.<BindingName> en worden JObject geconverteerd.

Bindingsnaam Bindingstype Beschrijving Eigenschappen
aanvraag WebPubSubEventRequest Beschrijft de upstream-aanvraag Eigenschap verschilt per verschillende gebeurtenistypen, waaronder afgeleide klassenConnectEventRequest, ConnectedEventRequestUserEventRequest enDisconnectedEventRequest
verbindingscontext WebPubSubConnectionContext Algemene aanvraaggegevens EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, Staten
gegevens BinaryData,,string,Streambyte[] Berichtgegevens aanvragen van cliënt tijdens de gebruikers message gebeurtenis -
gegevenstype WebPubSubDataType Request message dataType, die binary, text, json ondersteunt -
aanspraken IDictionary<string, string[]> Gebruikersclaims in systeemaanvraag connect -
zoekopdracht IDictionary<string, string[]> Gebruikersquery in systeemaanvraag connect -
subprotocollen IList<string> Beschikbare subprotocollen in systeemaanvraag connect -
clientcertificaten IList<ClientCertificate> Een lijst met certificaatvingerafdrukken van clients in systeemaanvraag connect -
reden string Reden in systeemaanvraag disconnected -

Belangrijk

In C# moeten parameters die door meerdere typen worden ondersteund als eerste worden geplaatst, dat wil zeggen request of data in plaats van het standaardtype BinaryData om de functie correct te binden.

Antwoord retourneren

WebPubSubTrigger respecteert het geretourneerde antwoord van de klant voor synchrone gebeurtenissen van connect en gebruikersgebeurtenissen. Alleen overeenkomende antwoorden worden teruggestuurd naar de service, anders wordt het genegeerd. WebPubSubTrigger Bovendien ondersteunt return-object gebruikers voor SetState() en ClearStates() het beheren van de metagegevens voor de verbinding. En de extensie voegt de resultaten van de retourwaarde samen met de oorspronkelijke waarden uit de aanvraag WebPubSubConnectionContext.States. De waarde in de bestaande sleutel wordt overschreven en de waarde in de nieuwe sleutel wordt toegevoegd.

Retourtype Beschrijving Eigenschappen
ConnectEventResponse Antwoord voor connect gebeurtenis Groepen, rollen, userid, subprotocol
UserEventResponse Antwoord voor gebruikersevenement DataType, Gegevens
EventErrorResponse Foutreactie voor de synchronisatie-gebeurtenis Code, Foutmelding
*WebPubSubEventResponse Basisreactietype van de ondersteunde antwoorden die worden gebruikt voor onzekere retourcases -

Invoerbinding

Onze extensie biedt twee invoerbindingen die gericht zijn op verschillende behoeften.

  • WebPubSubConnection

    Als u een client verbinding wilt laten maken met Azure Web PubSub Service, moet deze de URL van het service-eindpunt en een geldig toegangstoken weten. De WebPubSubConnection invoerbinding produceert vereiste informatie, zodat de client deze tokengeneratie zelf niet hoeft te verwerken. Omdat het token tijdslimiet heeft en kan worden gebruikt om een specifieke gebruiker te verifiëren bij een verbinding, slaat u het token niet in de cache op of deelt u het tussen clients. Een HTTP-trigger die met deze invoerbinding werkt, kan worden gebruikt voor clients om de verbindingsgegevens op te halen.

  • WebPubSubContext

    Wanneer u Static Web Apps gebruikt, is HttpTrigger de enige ondersteunde trigger en in het Web PubSub-scenario bieden we de WebPubSubContext invoerbinding die gebruikers helpt om de upstream http-aanvraag vanaf de servicezijde onder Web PubSub-protocollen te deserialiseren. Zo kunnen klanten vergelijkbare resultaten krijgen die vergelijkbaar zijn met WebPubSubTrigger om eenvoudig te verwerken in functies. Zie de voorbeelden hieronder. Wanneer deze wordt gebruikt met HttpTrigger, moet de klant de HttpTrigger-URL in de gebeurtenishandler dienovereenkomstig configureren.

Voorbeeld- WebPubSubConnection

In het volgende voorbeeld ziet u een C#-functie die verbindingsgegevens van Web PubSub verkrijgt met behulp van de invoerbinding en deze retourneert via HTTP. In het onderstaande voorbeeld wordt het doorgegeven via een UserId queryonderdeel voor clientaanvragen, zoals ?userid={User-A}.

[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubConnection(Hub = "<hub>", UserId = "{query.userid}")] WebPubSubConnection connection)
{
    return connection;
}

Geverifieerde tokens

Als de functie wordt geactiveerd door een geverifieerde client, kunt u een gebruikers-id-claim toevoegen aan het gegenereerde token. U kunt eenvoudig verificatie toevoegen aan een functie-app met behulp van App Service-verificatie.

Met App Service-verificatie worden HTTP-headers ingesteld met de namen x-ms-client-principal-id en x-ms-client-principal-name, die respectievelijk de client-principal-id en de naam van de geverifieerde gebruiker bevatten.

U kunt de eigenschap UserId van de binding instellen op de waarde van de header met behulp van een bindingexpressie: {headers.x-ms-client-principal-id} of {headers.x-ms-client-principal-name}.

[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubConnection(Hub = "<hub>", UserId = "{headers.x-ms-client-principal-name}")] WebPubSubConnection connection)
{
    return connection;
}

Notitie

Beperkingen bij de bindingparametertypen ondersteunen geen manier om een lijst of array door te geven. De WebPubSubConnection wordt niet volledig ondersteund door alle parameters die de server-SDK heeft, met name roles, en omvat ook groups en expiresAfter. In het geval dat de klant rollen moet toevoegen of het bouwproces van het toegangstoken in de functie moet uitstellen, wordt aanbevolen om met de Server SDK voor C# te werken.

[FunctionName("WebPubSubConnectionCustomRoles")]
public static async Task<Uri> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
{
    var serviceClient = new WebPubSubServiceClient(new Uri(endpoint), "<hub>", "<web-pubsub-connection-string>");
    var userId = req.Query["userid"].FirstOrDefault();
    // your method to get custom roles.
    var roles = GetRoles(userId);
    return await serviceClient.GetClientAccessUriAsync(TimeSpan.FromMinutes(5), userId, roles);
}

Voorbeeld- WebPubSubContext

In het volgende voorbeeld ziet u een C#-functie die web pubsub upstream-aanvraaggegevens verkrijgt met behulp van de invoerbinding onder connect gebeurtenistype en retourneert deze via HTTP.

[FunctionName("WebPubSubContextInputBinding")]
public static object Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubContext] WebPubSubContext wpsContext)
{
    // in the case request is a preflight or invalid, directly return prebuild response by extension.
    if (wpsContext.IsPreflight || wpsContext.HasError)
    {
        return wpsContext.Response;
    }
    var request = wpsContext.Request as ConnectEventRequest;
    var response = new ConnectEventResponse
    {
        UserId = wpsContext.Request.ConnectionContext.UserId
    };
    return response;
}

Configuratie

WebPubSubConnection

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

function.json-eigenschap Kenmerkeigenschap Beschrijving
soort n.v.t. Moet worden ingesteld op webPubSubConnection
richting n.v.t. Moet worden ingesteld op in
naam n.v.t. Variabelenaam die wordt gebruikt in functiecode voor het bindingsobject voor invoerverbindingen.
hub Knooppunt Vereist: de waarde moet worden ingesteld op de naam van de Web PubSub-hub om de functie te activeren. We ondersteunen het instellen van de waarde in kenmerk als hogere prioriteit, of deze kan worden ingesteld in app-instellingen als een globale waarde.
userId Gebruikers-id Optioneel: de waarde van de claim voor de gebruikers-id die moet worden ingesteld in het toegangssleuteltoken.
verbinding Verbinding Vereist: de naam van de app-instelling die de verbindingsreeks van de Web PubSub-service bevat (standaard ingesteld op 'WebPubSubConnectionString').

WebPubSubContext

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u hebt ingesteld in het functions.json-bestand en het WebPubSubContext kenmerk.

function.json-bestandseigenschap Attribuuteigenschap Beschrijving
soort n.v.t. Moet worden ingesteld op webPubSubContext.
richting n.v.t. Moet worden ingesteld op in.
naam n.v.t. Variabelenaam dat wordt gebruikt in functiecode voor invoer van een Web PubSub-aanvraag.
verbinding Verbinding Optioneel: de naam van een app-instellingen of verzameling die de upstream Azure Web PubSub-service aangeeft. De waarde wordt gebruikt voor misbruikbeveiliging en handtekeningvalidatie. De waarde wordt standaard automatisch omgezet met WebPubSubConnectionString. En null betekent dat de validatie niet nodig is en altijd slaagt.

Gebruik

WebPubSubConnection

WebPubSubConnection bevat de onderstaande eigenschappen.

Bindingsnaam Bindingstype Beschrijving
BaseUri URI Web PubSub-client verbinding URI.
URI URI Absolute URI van de Web PubSub-verbinding, bevat AccessToken gegenereerd op basis van de aanvraag.
AccessToken tekenreeks Gegenereerd AccessToken op basis van aanvraag UserId en servicegegevens.

WebPubSubContext

WebPubSubContext bevat de onderstaande eigenschappen.

Bindingsnaam Bindingstype Beschrijving Eigenschappen
aanvraag WebPubSubEventRequest Aanvraag van client, zie de onderstaande tabel voor meer informatie. WebPubSubConnectionContext van de header van het verzoek en andere eigenschappen die gedeserialiseerd zijn uit de body van het verzoek, beschrijven het verzoek, bijvoorbeeld ReasonDisconnectedEventRequest.
antwoord HttpResponseMessage Extensie-builds reageren voornamelijk op AbuseProtection en fouten. -
foutmelding tekenreeks Beschrijf de foutdetails bij het verwerken van de upstream-aanvraag. -
hasError Bool Vlag om aan te geven of het een geldige Web PubSub-upstream-aanvraag is. -
isPreflight Bool Vlag om aan te geven of het een voorbereidende aanvraag van AbuseProtectionis. -

Wanneer WebPubSubEventRequest gedeserialiseerd wordt, resulteert het in verschillende klassen die specifieke informatie over het aanvraagscenario verschaffen. Voor PreflightRequest of ongeldige gevallen kan de gebruiker de indicatoren IsPreflight en HasError controleren om te weten. Het wordt aangeraden om rechtstreeks de systeem-build reactie WebPubSubContext.Response te retourneren, of de klant kan fouten loggen wanneer dat nodig is. In verschillende scenario's kan de klant de aanvraageigenschappen lezen zoals hieronder.

Afgeleide klasse Beschrijving Eigenschappen
PreflightRequest Wordt gebruikt in AbuseProtection wanneer IsPreflightis waar -
ConnectEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Connect Claims, Query, Subprotocollen, Clientcertificaten
ConnectedEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Connected -
UserEventRequest Wordt gebruikt in het gebruikersgebeurtenistype Gegevens, Gegevenstype
DisconnectedEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Disconnected Reden

Notitie

Hoewel de WebPubSubContext invoerbinding een vergelijkbare methode voor het deserialiseren van aanvragen biedt onder HttpTrigger in vergelijking met WebPubSubTrigger, zijn er beperkingen; namelijk dat de verbindingsstatus na samenvoegen niet wordt ondersteund. Het retourantwoord wordt nog steeds gerespecteerd door de servicezijde, maar gebruikers moeten het antwoord zelf bouwen. Als gebruikers behoeften hebben om het antwoord op de gebeurtenis in te stellen, moet u een HttpResponseMessage die ConnectEventResponse bevat of berichten voor de gebruikersgebeurtenis retourneren als response body en de verbindingsstatus met de sleutel ce-connectionstate in de responseheader plaatsen.

Uitvoerbinding

Gebruik de Web PubSub-uitvoerbinding om de Azure Web PubSub-service aan te roepen om iets te doen. U kunt een bericht uitzenden naar:

  • Alle verbonden clients
  • Verbonden clients geverifieerd voor een specifieke gebruiker
  • Verbonden clients die lid zijn van een specifieke groep
  • Een specifieke clientverbinding

Met de uitvoerbinding kunt u niet alleen clients en groepen beheren, maar ook machtigingen gericht op een specifieke connectionId binnen een groep verlenen of intrekken.

  • Verbinding toevoegen aan groep
  • Gebruiker toevoegen aan groep
  • Verbinding uit een groep verwijderen
  • Gebruiker uit een groep verwijderen
  • Gebruiker verwijderen uit alle groepen
  • Alle clientverbindingen sluiten
  • Een specifieke clientverbinding sluiten
  • Verbindingen in een groep sluiten
  • Machtiging verlenen voor een verbinding
  • Machtiging voor een verbinding intrekken

Zie het overzicht voor informatie over de setup en configuratie.

Voorbeeld

[FunctionName("WebPubSubOutputBinding")]
public static async Task RunAsync(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSub(Hub = "<hub>")] IAsyncCollector<WebPubSubAction> actions)
{
    await actions.AddAsync(WebPubSubAction.CreateSendToAllAction("Hello Web PubSub!", WebPubSubDataType.Text));
}

WebPubSubAction

WebPubSubAction is het abstracte basistype van uitvoerbindingen. De afgeleide typen vertegenwoordigen de actieserver die de service wil aanroepen.

In de C#-taal bieden we een aantal statische methoden WebPubSubAction om beschikbare acties te detecteren. De gebruiker kan bijvoorbeeld het SendToAllAction maken door WebPubSubAction.CreateSendToAllAction() aan te roepen.

Afgeleide klasse Eigenschappen
SendToAllAction Gegevens, DataType, Uitgesloten
SendToGroupAction Groep, Gegevens, DataType, Uitgesloten
SendToUserAction Gebruikers-ID, Gegevens, Gegevenstype
SendToConnectionAction VerbindingsId, Gegevens, Gegevenstype
AddUserToGroupAction UserId, groep
RemoveUserFromGroupAction UserId, groep
RemoveUserFromAllGroupsAction Gebruikers-id
AddConnectionToGroupAction ConnectionId, Groep
RemoveConnectionFromGroupAction ConnectionId, Groep
CloseAllConnectionsAction Uitgesloten, reden
CloseClientConnectionAction Connectie-id, Reden
CloseGroupConnectionsAction Groep, uitgesloten, reden
GrantPermissionAction VerbinderingsId, Machtiging, DoelNaam
RevokePermissionAction VerbinderingsId, Machtiging, DoelNaam

Configuratie

WebPubSub

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

function.json-eigenschap Attribuuteigenschap Beschrijving
soort n.v.t. Moet worden ingesteld op webPubSub
richting n.v.t. Moet worden ingesteld op out
naam n.v.t. Variabelenaam die wordt gebruikt in functiecode voor uitvoerbindingsobject.
hub Knooppunt De waarde moet worden ingesteld op de naam van de Web PubSub-hub om de functie te activeren. We ondersteunen het instellen van de waarde in kenmerk als hogere prioriteit, of deze kan worden ingesteld in app-instellingen als een globale waarde.
verbinding Verbinding De naam van de app-instelling die de verbindingsreeks voor de Web PubSub-service bevat (standaard is ingesteld op 'WebPubSubConnectionString').

Probleemoplossing

Logboekregistratie van de console instellen

U kunt ook eenvoudig consolelogboekregistratie inschakelen als u dieper wilt ingaan op de aanvragen die u voor de service maakt.

Volgende stappen

Gebruik deze resources om te beginnen met het bouwen van uw eigen toepassing: