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
(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>
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. Connect
gebeurtenis respecteert en EventErrorResponse
, en gebruikersgebeurtenis ConnectEventResponse
respecteert UserEventResponse
en EventErrorResponse
resttypen 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 message de 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 , ConnectedEventRequest UserEventRequest enDisconnectedEventRequest |
connectionContext | WebPubSubConnectionContext |
Algemene aanvraaggegevens | EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States |
gegevens | BinaryData ,,string ,Stream byte[] |
Berichtgegevens aanvragen van client in gebruikers message gebeurtenis |
- |
Datatype | WebPubSubDataType |
Request message dataType, die ondersteuning biedt binary voor , text json |
- |
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 deWebPubSubContext
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 metWebPubSubTrigger
eenvoudig 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
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 roles
en 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 AbuseProtection is. |
- |
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: