Delen 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.

Actie Type
Een functie uitvoeren wanneer berichten afkomstig zijn van de service Triggerbinding
Aanvraag binden aan doelobject onder Http-trigger voor onderhandelings- en upstream-aanvragen Invoerbinding
Service-doacties aanroepen Uitvoerbinding

Voorbeelden van productdocumentatie over broncodepakket-API-referentiedocumentatie | | | |

Toevoegen aan uw Functions-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 de extensiebundel wordt gebruikt voor alle andere toepassingstypen.

Taal Toevoegen door... Opmerkingen
C# Het NuGet-pakket, versie-prerelease installeren
C#-script, JavaScript, Python, PowerShell Extensies expliciet installeren, uitbreidingsbundels gebruiken De Azure Tools-extensie wordt aanbevolen voor gebruik met Visual Studio Code.
C#-script (alleen online in Azure Portal) Een binding toevoegen Zie Uw extensies bijwerken als u bestaande bindingsextensies wilt bijwerken zonder dat u uw functie-app opnieuw hoeft te publiceren.

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 voor het verwerken van serviceaanvragen.

(5)-(6) WebPubSub uitvoerbinding om service aan te vragen, doet iets.

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 ziet er ongeveer als volgt uit die 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 Functions ->App-sleutels ->Systeemsleutels ->webpubsub_extension nadat u de functie-app in 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.

Opmerking

[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. Connectgebeurtenis respecteert en EventErrorResponse, en gebruikersgebeurtenis ConnectEventResponse respecteert UserEventResponse en EventErrorResponseresttypen die niet overeenkomen met het huidige scenario, worden genegeerd. En als EventErrorResponse de service wordt geretourneerd, wordt de clientverbinding niet meer gebruikt.

[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 kenmerk 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 Kenmerkeigenschap Beschrijving
type N.v.t. Vereist - moet worden ingesteld op webPubSubTrigger.
direction N.v.t. Vereist - moet worden ingesteld op in.
name N.v.t. Vereist: de variabelenaam die wordt gebruikt in functiecode voor de parameter die de gebeurtenisgegevens ontvangt.
naaf Hub 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.
eventType WebPubSubEventType Vereist: de waarde moet worden ingesteld als het gebeurtenistype van berichten om de functie te activeren. De waarde moet een user of system.
eventName EventName 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 zich 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 Connection 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 automatisch omgezet met app-instellingen WebPubSubConnectionString standaard. 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 zwak getypte taal, zoals JavaScript, name wordt gebruikt function.json om het triggerobject te binden met betrekking tot de onderstaande toewijzingstabel. En respecteer dataType om function.json het bericht dienovereenkomstig te converteren wanneer name deze is ingesteld data als het bindingsobject voor 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
connectionContext WebPubSubConnectionContext Algemene aanvraaggegevens EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States
gegevens BinaryData,,string,Streambyte[] Berichtgegevens aanvragen van client in gebruikers message gebeurtenis -
Datatype WebPubSubDataType Request message dataType, die ondersteuning biedt binaryvoor , textjson -
claims IDictionary<string, string[]> Gebruikersclaims in systeemaanvraag connect -
query IDictionary<string, string[]> Gebruikersquery in systeemaanvraag connect -
subprotocollen IList<string> Beschikbare subprotocollen in systeemaanvraag connect -
clientCertificates IList<ClientCertificate> Een lijst met certificaatvingerafdrukken van clients in systeemaanvraag connect -
reason string Reden in systeemaanvraag disconnected -

Belangrijk

In C# moeten meerdere typen ondersteunde parameter worden geplaatst in de eerste, d.w. request of data dat andere dan het standaardtype BinaryData om de functiebinding correct te maken.

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, ErrorMessage
*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 dit HttpTrigger de enige ondersteunde trigger. In het Web PubSub-scenario bieden we de WebPubSubContext invoerbinding waarmee gebruikers deserialiseren van de upstream http-aanvraag vanuit de servicezijde onder Web PubSub-protocollen. Zo kunnen klanten vergelijkbare resultaten krijgen die worden vergeleken met WebPubSubTrigger eenvoudig te verwerken in functies. Zie de voorbeelden hieronder. Wanneer deze wordt gebruikt met HttpTrigger, moet de klant de httpTrigger-URL configureren in gebeurtenis-handler dienovereenkomstig.

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 RESPECTIEVELIJK HTTP-headers ingesteld x-ms-client-principal-id die x-ms-client-principal-name de client-principal-id en -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

Beperkt tot de bindingparametertypen bieden geen ondersteuning voor het doorgeven van lijsten of matrices. De WebPubSubConnection parameter wordt niet volledig ondersteund met alle parameters die de SERVER-SDK heeft, met name rolesen bevat en bevat groups ook expiresAfter. In het geval dat de klant rollen moet toevoegen of het toegangstoken in de functie moet uitstellen, wordt het aanbevolen om te werken met de server-SDK voor C#.

[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
type N.v.t. Moet worden ingesteld op webPubSubConnection
direction N.v.t. Moet worden ingesteld op in
name N.v.t. Variabelenaam die wordt gebruikt in functiecode voor het bindingsobject voor invoerverbindingen.
naaf Hub 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 Connection Vereist: de naam van de app-instelling die de Web PubSub-service bevat verbindingsreeks (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-eigenschap Kenmerkeigenschap Beschrijving
type N.v.t. Moet worden ingesteld op webPubSubContext.
direction N.v.t. Moet worden ingesteld op in.
name N.v.t. Variabelenaam die wordt gebruikt in functiecode voor invoer web pubsub-aanvraag.
verbinding Connection 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-clientverbindings-URI.
URI URI Absolute URI van de Web PubSub-verbinding, bevat AccessToken gegenereerde basis op 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 aanvraagheader en andere eigenschappen die zijn gedeserialiseerd vanuit de hoofdtekst van de aanvraag, beschrijven de aanvraag, bijvoorbeeld Reason DisconnectedEventRequest.
antwoord HttpResponseMessage Reactie van extensie-builds voornamelijk voor AbuseProtection en foutencases. -
errorMessage 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. -

Voor WebPubSubEventRequest, het wordt gedeserialiseerd naar verschillende klassen die verschillende informatie over het aanvraagscenario bieden. Voor PreflightRequest of niet geldige gevallen kan de gebruiker de vlaggen IsPreflight controleren en HasError weten. Het wordt aangeraden om rechtstreeks een reactie WebPubSubContext.Response van systeembuilds te retourneren, of de klant kan fouten op aanvraag registreren. In verschillende scenario's kan de klant de aanvraageigenschappen lezen zoals hieronder.

Afgeleide klasse Beschrijving Eigenschappen
PreflightRequest Wordt gebruikt in AbuseProtection wanneer IsPreflight waar is -
ConnectEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Connect Claims, Query, Subprotocols, ClientCertificates
ConnectedEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Connected -
UserEventRequest Wordt gebruikt in het gebeurtenistype van de gebruiker Gegevens, DataType
DisconnectedEventRequest Wordt gebruikt in het gebeurtenistype van het systeem Disconnected Reden

Notitie

Hoewel het WebPubSubContext een invoerbinding is die vergelijkbaar is met deserialiseren van HttpTrigger aanvragen in vergelijking met WebPubSubTrigger, zijn er beperkingen, dat wil zeggen dat het samenvoegen van de verbindingsstatus niet wordt ondersteund. Het retourantwoord wordt nog steeds gerespecteerd door de servicezijde, maar gebruikers moeten het antwoord zelf bouwen. Als gebruikers het antwoord op de gebeurtenis moeten instellen, moet u een HttpResponseMessage bevat ConnectEventResponse of berichten voor de gebruikers gebeurtenis retourneren als hoofdtekst van het antwoord en de verbindingsstatus met de sleutel ce-connectionstate in de antwoordheader 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 ook clients en groepen beheren en machtigingen verlenen/intrekken die zijn gericht op specifieke connectionId met groep.

  • 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 het instellen en configureren van details.

Opmerking

[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 per aanroep WebPubSubAction.CreateSendToAllAction()maken.

Afgeleide klasse Eigenschappen
SendToAllAction Gegevens, DataType, Uitgesloten
SendToGroupAction Groep, Gegevens, DataType, Uitgesloten
SendToUserAction UserId, Data, DataType
SendToConnectionAction ConnectionId, Data, DataType
AddUserToGroupAction UserId, groep
RemoveUserFromGroupAction UserId, groep
RemoveUserFromAllGroupsAction Gebruikers-id
AddConnectionToGroupAction ConnectionId, Groep
RemoveConnectionFromGroupAction ConnectionId, Groep
CloseAllConnectionsAction Uitgesloten, reden
CloseClientConnectionAction ConnectionId, Reden
CloseGroupConnectionsAction Groep, uitgesloten, reden
GrantPermissionAction ConnectionId, Permission, TargetName
RevokePermissionAction ConnectionId, Permission, TargetName

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 Kenmerkeigenschap Beschrijving
type N.v.t. Moet worden ingesteld op webPubSub
direction N.v.t. Moet worden ingesteld op out
name N.v.t. Variabelenaam die wordt gebruikt in functiecode voor uitvoerbindingsobject.
naaf Hub 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 Connection De naam van de app-instelling die de Web PubSub-service bevat verbindingsreeks (standaard 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: