Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här referensen beskriver hur du hanterar Web PubSub-händelser i Azure Functions.
Web PubSub är en Azure-hanterad tjänst som hjälper utvecklare att enkelt skapa webbprogram med realtidsfunktioner och publiceringsprenumerationsmönster.
| Åtgärd | Typ |
|---|---|
| Kör en funktion när meddelanden kommer från tjänsten | Utlösarbindning |
| Binda begäran till målobjekt under HTTP-utlösare för förhandlingar och överordnade begäranden | Indatabindning |
| Anropa tjänståtgärder | Utdatabindning |
Lägg till i funktionsappen
När du arbetar med utlösaren och bindningarna måste du referera till rätt paket. NuGet-paketet används för .NET-klassbibliotek medan ett tilläggspaket används för alla andra programtyper.
| Språk | Lägg till efter... |
|---|---|
| C# | Installera NuGet-paketet, målspecifik version |
| JavaScript, Python, PowerShell, C#-skript (endast Azure Portal) | Använd tilläggspaket (rekommenderas), installera uttryckligen tillägg |
Nyckelbegrepp
(1)-(2) WebPubSubConnection indatabindning med HttpTrigger för att generera klientanslutning.
(3)-(4) WebPubSubTrigger utlösarbindning eller WebPubSubContext indatabindning med HttpTrigger för att hantera tjänstbegäran.
(5)-(6) WebPubSub utdatabindning för begärandetjänsten gör något.
Utlösarbindning
Använd funktionsutlösaren för att hantera begäranden från Azure Web PubSub-tjänsten.
WebPubSubTrigger används när du behöver hantera begäranden från tjänstsidan. Mönstret för utlösarens slutpunkt skulle vara som nedan, vilket bör anges på webbpubtjänstsidan (Portal: inställningar –> händelsehanterare –> URL-mall). I slutpunktsmönstret krävscode=<API_KEY>frågedelen när du använder Azure-funktionsappen av säkerhetsskäl. Nyckeln finns i Azure Portal. Hitta funktionsappens resurs och gå till Functions ->App keys ->System keys ->webpubsub_extension när du har distribuerat funktionsappen till Azure. Den här nyckeln behövs dock inte när du arbetar med lokala funktioner.
<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>
Exempel
[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 bindning stöder också returvärde i synkroniserade scenarier, till exempel system Connect - och användarhändelse, när servern kan kontrollera och neka klientbegäran eller skicka meddelanden direkt till anroparen.
Connect händelse respekterar ConnectEventResponse och EventErrorResponse, och användarhändelse respekterar UserEventResponse och EventErrorResponse, vilotyper som inte matchar det aktuella scenariot ignoreras. Och om EventErrorResponse returneras släpper tjänsten klientanslutningen.
[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
[WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}
Attribut och anteckningar
Använd attributet i C#-klassbibliotek.WebPubSubTrigger
Här är ett WebPubSubTrigger attribut i en metodsignatur:
[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")]
WebPubSubConnectionContext context, ILogger log)
{
...
}
Ett fullständigt exempel finns i C#-exempel.
Konfiguration
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json .
| function.json egenskap | Attributegenskap | beskrivning |
|---|---|---|
| typ | saknas | Obligatoriskt – måste anges till webPubSubTrigger. |
| riktning | saknas | Obligatoriskt – måste anges till in. |
| Namn | saknas | Obligatoriskt – variabelnamnet som används i funktionskoden för parametern som tar emot händelsedata. |
| nav | Hubb | Obligatoriskt – värdet måste anges till namnet på Web PubSub-hubben för att funktionen ska utlösas. Vi har stöd för att ange värdet i attributet som högre prioritet, eller så kan det anges i appinställningar som ett globalt värde. |
| Händelsetyp | WebPubSubEventType | Obligatoriskt – värdet måste anges som händelsetyp för meddelanden för att funktionen ska utlösas. Värdet ska vara antingen user eller system. |
| eventName | Evenemangets namn | Obligatoriskt – värdet måste anges som händelse av meddelanden för att funktionen ska utlösas.
För system händelsetyp ska händelsenamnet vara i connect, connected, disconnected.
För användardefinierade subprotokoler är messagehändelsenamnet .
För underprotokol json.webpubsub.azure.v1.som stöds av systemet är händelsenamnet användardefinierat händelsenamn. |
| samband | Anslutning | Valfritt – namnet på en appinställningar eller inställningssamling som anger den överordnade Azure Web PubSub-tjänsten. Värdet används för signaturverifiering. Och värdet matchas automatiskt med appinställningarna "WebPubSubConnectionString" som standard. Och null innebär att valideringen inte behövs och alltid lyckas. |
Användningsområden
I C# WebPubSubEventRequest är typen identifierad bindningsparameter, restparametrar är bundna av parameternamn. Kontrollera tabellen nedan med tillgängliga parametrar och typer.
I ett svagt skrivet språk som JavaScript name används i function.json för att binda utlösarobjektet för mappningstabellen nedan. Och respekt dataType för function.json att konvertera meddelandet i enlighet med detta när name är inställt data på som bindningsobjektet för utlösarindata. Alla parametrar kan läsas från context.bindingData.<BindingName> och JObject konverteras.
| Bindningsnamn | Bindningstyp | beskrivning | Egenskaper |
|---|---|---|---|
| begäran | WebPubSubEventRequest |
Beskriver den överordnade begäran | Egenskapen skiljer sig mellan olika händelsetyper, inklusive härledda klasser ConnectEventRequest, ConnectedEventRequestoch UserEventRequestDisconnectedEventRequest |
| anslutningskontext | WebPubSubConnectionContext |
Gemensam information om begäranden | Händelsetyp, Händelsenamn, Nav, Anslutnings-ID, Användar-ID, Rubriker, Ursprung, Signatur, Tillstånd |
| data |
BinaryData,string,Stream,byte[] |
Begära meddelandedata från klienten i användarhändelse message |
- |
| Datatyp | WebPubSubDataType |
Begär meddelandedataType, som stöder binary, text, json |
- |
| anspråk | IDictionary<string, string[]> |
Användaranspråk i systembegäran connect |
- |
| förfrågan | IDictionary<string, string[]> |
Användarfråga i systembegäran connect |
- |
| underprotokoll | IList<string> |
Tillgängliga delprotokoler i systembegäran connect |
- |
| klientcertifikat | IList<ClientCertificate> |
En lista över tumavtryck för certifikat från klienter i systembegäran connect |
- |
| orsak | string |
Orsak i systembegäran disconnected |
- |
Viktigt!
I C# måste flera typer som stöds ange parametern MÅSTE placeras i den första, dvs. request eller data den andra än standardtypen BinaryData för att göra funktionen bindning korrekt.
Retursvar
WebPubSubTrigger respekterar kundens returnerade svar för synkrona händelser och connect användarhändelser. Endast matchat svar skickas tillbaka till tjänsten, annars ignoreras det. Dessutom stöder returneringsobjekt WebPubSubTrigger användare till SetState() och ClearStates() för att hantera metadata för anslutningen. Och tillägget sammanfogar resultatet från returvärdet med de ursprungliga från begäran WebPubSubConnectionContext.States. Värdet i den befintliga nyckeln skrivs över och värdet i den nya nyckeln läggs till.
| Returtyp | beskrivning | Egenskaper |
|---|---|---|
ConnectEventResponse |
Svar för connect händelse |
Grupper, roller, UserId, Subprotocol |
UserEventResponse |
Svar för användarhändelse | Datatyp, Data |
EventErrorResponse |
Felsvar för synkroniseringshändelsen | Kod, ErrorMessage |
*WebPubSubEventResponse |
Bassvarstyp för de som stöds och som används för osäkra returärenden | - |
Indatabindning
Vårt tillägg innehåller två indatabindningar som riktar sig till olika behov.
WebPubSubConnectionFör att en klient ska kunna ansluta till Azure Web PubSub Service måste den känna till tjänstens slutpunkts-URL och en giltig åtkomsttoken. Indatabindningen
WebPubSubConnectiongenererar nödvändig information, så klienten behöver inte hantera själva tokengenereringen. Eftersom token är tidsbegränsad och kan användas för att autentisera en specifik användare till en anslutning, cachelagra inte token eller dela den mellan klienter. En HTTP-utlösare som arbetar med den här indatabindningen kan användas för klienter för att hämta anslutningsinformationen.WebPubSubContextNär du använder är Static Web Apps,
HttpTriggerär den enda utlösare som stöds och under Web PubSub-scenariot tillhandahållerWebPubSubContextvi indatabindningen som hjälper användare att deserialisera uppströms http-begäran från tjänstsidan under Web PubSub-protokoll. Så att kunderna kan få liknande resultat jämfört medWebPubSubTriggerför att enkelt hantera i funktioner. Se exempel nedan. När den används med måste kunden konfigurera den HttpTrigger-exponerade URL:en i händelsehanteraren i enlighet medHttpTriggerdetta.
Exempel- WebPubSubConnection
I följande exempel visas en C#-funktion som hämtar anslutningsinformation för Web PubSub med hjälp av indatabindningen och returnerar den via HTTP. I exemplet nedan skickas UserId den via frågedelen för klientbegäran som ?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;
}
Autentiserade token
Om funktionen utlöses av en autentiserad klient kan du lägga till ett användar-ID-anspråk till den genererade token. Du kan enkelt lägga till autentisering i en funktionsapp med App Service-autentisering.
App Service-autentisering anger HTTP-huvuden med namnet x-ms-client-principal-id och x-ms-client-principal-name som innehåller den autentiserade användarens klienthuvudnamn respektive namn.
Du kan ange egenskapen UserId för bindningen till värdet från antingen huvudet med ett bindningsuttryck: {headers.x-ms-client-principal-id} eller {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;
}
Kommentar
Begränsningen för bindningsparametertyper stöder inte att överföra en lista eller matris, WebPubSubConnection stöds inte helt av alla de parametrar som server-SDK:n har, särskilt roles, inklusive även groups och expiresAfter. Om kunden behöver lägga till roller eller fördröja genereringen av åtkomsttoken i funktionen rekommenderar vi att du arbetar med server-SDK för 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);
}
Exempel- WebPubSubContext
I följande exempel visas en C#-funktion som hämtar information om Web PubSub-överordnad begäran med hjälp av indatabindningen under connect händelsetyp och returnerar den 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;
}
Konfiguration
WebPubSubConnection
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i function.json-filen och WebPubSubConnection attributet.
| function.json egenskap | Attributegenskap | beskrivning |
|---|---|---|
| typ | saknas | Måste anges till webPubSubConnection |
| riktning | saknas | Måste anges till in |
| Namn | saknas | Variabelnamn som används i funktionskoden för indataanslutningsbindningsobjekt. |
| nav | Hubb | Obligatoriskt – Värdet måste anges till namnet på Web PubSub-hubben för att funktionen ska utlösas. Vi har stöd för att ange värdet i attributet som högre prioritet, eller så kan det anges i appinställningar som ett globalt värde. |
| userId | AnvändarID | Valfritt – värdet för det anspråk för användaridentifierare som ska anges i åtkomstnyckeltoken. |
| samband | Anslutning | Obligatoriskt – namnet på appinställningen som innehåller Web PubSub Service-anslutningssträng (standardvärdet är "WebPubSubConnectionString"). |
WebPubSubContext
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i functions.json-filen och WebPubSubContext attributet.
| function.json egenskap | Attributegenskap | beskrivning |
|---|---|---|
| typ | saknas | Måste anges till webPubSubContext. |
| riktning | saknas | Måste anges till in. |
| Namn | saknas | Variabelnamn som används i funktionskoden för indata för Web PubSub-begäran. |
| samband | Anslutning | Valfritt – namnet på en appinställningar eller inställningssamling som anger den överordnade Azure Web PubSub-tjänsten. Värdet används för verifiering av missbruksskydd och signaturer. Värdet matchas automatiskt med "WebPubSubConnectionString" som standard. Och null innebär att valideringen inte behövs och alltid lyckas. |
Förbrukning
WebPubSubConnection
WebPubSubConnection innehåller egenskaperna nedan.
| Bindningsnamn | Bindningstyp | beskrivning |
|---|---|---|
| BaseUri | Uri | Web PubSub-klientanslutnings-URI. |
| Uri | Uri | Absolut URI för Web PubSub-anslutningen, innehåller AccessToken genererad bas på begäran. |
| AccessToken | sträng | Genereras AccessToken baserat på begäranDet användar-ID och tjänstinformation. |
WebPubSubContext
WebPubSubContext innehåller egenskaperna nedan.
| Bindningsnamn | Bindningstyp | beskrivning | Egenskaper |
|---|---|---|---|
| begäran | WebPubSubEventRequest |
Begäran från klienten finns i tabellen nedan för mer information. |
WebPubSubConnectionContext från begärandehuvudet och andra egenskaper som deserialiserats från begärandetexten beskriver begäran, till exempel Reason för DisconnectedEventRequest. |
| svar | HttpResponseMessage |
Tillägget bygger svar främst för AbuseProtection och felfall. |
- |
| felmeddelande | sträng | Beskriv felinformationen när du bearbetar den överordnade begäran. | - |
| hasError | Bool | Flagga för att ange om det är en giltig Web PubSub-begäran överordnad. | - |
| isPreflight | Bool | Flagga för att ange om det är en förhandsbegäran av AbuseProtection. |
- |
För WebPubSubEventRequestär den deserialiserad till olika klasser som ger olika information om begärandescenariot. För PreflightRequest eller inte giltiga fall kan användaren kontrollera flaggorna IsPreflight och HasError veta. Vi föreslår att du returnerar systemversionssvaret WebPubSubContext.Response direkt, eller så kan kunden logga fel på begäran. I olika scenarier kan kunden läsa egenskaperna för begäran enligt nedan.
| Härledd klass | beskrivning | Egenskaper |
|---|---|---|
PreflightRequest |
Används i AbuseProtection när IsPreflight är sant |
- |
ConnectEventRequest |
Används i systemhändelsetyp Connect |
Anspråk, Fråga, Underprotokoll, Klientcertifikat |
ConnectedEventRequest |
Används i systemhändelsetyp Connected |
- |
UserEventRequest |
Används i händelsetyp för användare | Data, Datatyp |
DisconnectedEventRequest |
Används i systemhändelsetyp Disconnected |
Anledning |
Kommentar
Även om WebPubSubContext är en indatabindning som tillhandahåller en liknande metod för att deserialisera begäran under HttpTrigger i jämförelse med WebPubSubTrigger, finns det begränsningar; det vill säga, anslutningstillstånd efter sammanslagning stöds inte. Retursvaret respekteras fortfarande av tjänstsidan, men användarna måste själva skapa svaret. Om användarna behöver ange händelsesvaret bör du returnera en HttpResponseMessage contains eller meddelanden för användarhändelsen som ConnectEventResponse och ange anslutningstillstånd med nyckeln i ce-connectionstate.
Utdatabindning
Använd utdatabindningen Web PubSub för att anropa Azure Web PubSub-tjänsten för att göra något. Du kan sända ett meddelande till:
- Alla anslutna klienter
- Anslutna klienter autentiserade till en specifik användare
- Anslutna klienter som är anslutna i en specifik grupp
- En specifik klientanslutning
Med utdatabindningen kan du också hantera klienter och grupper, samt bevilja/återkalla behörigheter för specifika connectionId med grupp.
- Lägg till anslutning till grupp
- Lägg till användare i grupp
- Ta bort anslutningen från en grupp
- Ta bort användare från en grupp
- Ta bort användare från alla grupper
- Stäng alla klientanslutningar
- Stäng en specifik klientanslutning
- Stänga anslutningar i en grupp
- Bevilja behörighet för en anslutning
- Återkalla behörighet för en anslutning
Information om konfiguration och konfigurationsinformation finns i översikten.
Exempel
[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 är den grundläggande abstrakta typen av utdatabindningar. De härledda typerna representerar åtgärdsservern som vill att tjänsten ska anropas.
På C#-språket tillhandahåller vi några statiska metoder under WebPubSubAction för att identifiera tillgängliga åtgärder. Användaren kan till exempel skapa per-anropet SendToAllActionWebPubSubAction.CreateSendToAllAction().
| Härledd klass | Egenskaper |
|---|---|
SendToAllAction |
Data, DataType, Exkluderade |
SendToGroupAction |
Grupp, Data, DataType, Exkluderad |
SendToUserAction |
Användar-ID, Data, Datatyp |
SendToConnectionAction |
ConnectionId, Data, Datatyp |
AddUserToGroupAction |
UserId, Grupp |
RemoveUserFromGroupAction |
UserId, Grupp |
RemoveUserFromAllGroupsAction |
AnvändarID |
AddConnectionToGroupAction |
ConnectionId, Grupp |
RemoveConnectionFromGroupAction |
ConnectionId, Grupp |
CloseAllConnectionsAction |
Exkluderad, orsak |
CloseClientConnectionAction |
ConnectionId, orsak |
CloseGroupConnectionsAction |
Grupp, Exkluderad, Orsak |
GrantPermissionAction |
AnslutningsId, Behörighet, MålNamn |
RevokePermissionAction |
AnslutningsId, Behörighet, MålNamn |
Konfiguration
WebPubSub (på engelska)
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i function.json-filen och WebPubSub attributet.
| function.json egenskap | Attributegenskap | beskrivning |
|---|---|---|
| typ | saknas | Måste anges till webPubSub |
| riktning | saknas | Måste anges till out |
| Namn | saknas | Variabelnamn som används i funktionskoden för utdatabindningsobjekt. |
| nav | Hubb | Värdet måste anges till namnet på Web PubSub-hubben för att funktionen ska utlösas. Vi har stöd för att ange värdet i attributet som högre prioritet, eller så kan det anges i appinställningar som ett globalt värde. |
| samband | Anslutning | Namnet på appinställningen som innehåller Web PubSub Service-anslutningssträng (standardvärdet är "WebPubSubConnectionString"). |
Felsökning
Konfigurera konsolloggning
Du kan också enkelt aktivera konsolloggning om du vill fördjupa dig i de begäranden som du gör mot tjänsten.
Nästa steg
Använd dessa resurser för att börja skapa ett eget program: