Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de 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.
| Actie | Typologie |
|---|---|
| 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 |
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 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 -> ->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>
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 ConnectEventResponse, en gebruikersgebeurtenis EventErrorResponse 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 |
|---|---|---|
| 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. |
| naaf | 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 een user of system. |
| 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 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 | 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 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 |
| verbindingscontext | WebPubSubConnectionContext |
Algemene aanvraaggegevens | EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, Staten |
| gegevens |
BinaryData,,string,Streambyte[] |
Berichtgegevens aanvragen van client in gebruikers message gebeurtenis |
- |
| Datatype | WebPubSubDataType |
Request message dataType, die ondersteuning biedt binaryvoor , textjson |
- |
| 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 meerdere typen ondersteunde parameter
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 dit
HttpTriggerde enige ondersteunde trigger. In het Web PubSub-scenario bieden we deWebPubSubContextinvoerbinding waarmee gebruikers deserialiseren van de upstream http-aanvraag vanuit de servicezijde onder Web PubSub-protocollen. Zo kunnen klanten vergelijkbare resultaten krijgen die worden vergeleken metWebPubSubTriggereenvoudig te verwerken in functies. Zie de voorbeelden hieronder. Wanneer deze wordt gebruikt metHttpTrigger, 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
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 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 |
|---|---|---|
| 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. |
| naaf | 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 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 |
|---|---|---|
| soort | n.v.t. | Moet worden ingesteld op webPubSubContext. |
| richting | n.v.t. | Moet worden ingesteld op in. |
| naam | n.v.t. | Variabelenaam die wordt gebruikt in functiecode voor invoer 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-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 ReasonDisconnectedEventRequest. |
| antwoord | HttpResponseMessage |
Reactie van extensie-builds voornamelijk voor AbuseProtection en foutencases. |
- |
| 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. |
- |
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, Subprotocollen, Clientcertificaten |
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 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 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 |
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 |
ConnectionId, 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 | Kenmerkeigenschap | 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. |
| naaf | 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 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: