Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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
(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>
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.
WebPubSubConnectionAls 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
WebPubSubConnectioninvoerbinding 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.WebPubSubContextWanneer u Static Web Apps gebruikt, is
HttpTriggerde enige ondersteunde trigger en in het Web PubSub-scenario bieden we deWebPubSubContextinvoerbinding 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 metWebPubSubTriggerom eenvoudig te verwerken in functies. Zie de voorbeelden hieronder. Wanneer deze wordt gebruikt metHttpTrigger, 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: