Azure Web PubSub-utlösare och bindningar för Azure Functions
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 |
Referensdokumentation | för källkodspaketets | API-referens Produktdokumentation | – exempel |
Lägg till i din Functions-app
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 tilläggspaketet används för alla andra programtyper.
Språk | Lägg till efter... | Kommentarer |
---|---|---|
C# | Installera NuGet-paketet, förhandsversion av version | |
C#-skript, JavaScript, Python, PowerShell | Installera uttryckligen tillägg, Använd tilläggspaket | Azure Tools-tillägget rekommenderas att användas med Visual Studio Code. |
C#-skript (endast online i Azure-portalen) | Lägga till en bindning | Information om hur du uppdaterar befintliga bindningstillägg utan att behöva publicera om funktionsappen finns i Uppdatera dina 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ävs frågedelen code=<API_KEY>
när du använder Azure-funktionsappen av säkerhetsskäl. Nyckeln finns i Azure-portalen. 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 | EventName | 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 message händelsenamnet . För underprotokol json.webpubsub.azure.v1. som stöds av systemet är händelsenamnet användardefinierat händelsenamn. |
samband | Connection | 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 , ConnectedEventRequest och UserEventRequest DisconnectedEventRequest |
connectionContext | WebPubSubConnectionContext |
Gemensam information om begäranden | EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States |
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 |
- |
query | IDictionary<string, string[]> |
Användarfråga i systembegäran connect |
- |
subprotocols | IList<string> |
Tillgängliga delprotokoler i systembegäran connect |
- |
clientCertificates | 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 | DataType, 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.
WebPubSubConnection
Fö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
WebPubSubConnection
genererar 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.WebPubSubContext
När du använder är Static Web Apps,
HttpTrigger
är den enda utlösare som stöds och under Web PubSub-scenariot tillhandahållerWebPubSubContext
vi 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 medWebPubSubTrigger
fö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 medHttpTrigger
detta.
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änsad till bindningsparametertyper stöder inte ett sätt att skicka lista eller matris, WebPubSubConnection
stöds inte fullt ut med alla parametrar som server-SDK:t har, särskilt roles
, och inkluderar 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 | Connection | Obligatoriskt – namnet på appinställningen som innehåller Web PubSub Service-niska veze (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 | Connection | 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. |
Användning
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. |
- |
errorMessage | 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 |
Claims, Query, Subprotocols, ClientCertificates |
ConnectedEventRequest |
Används i systemhändelsetyp Connected |
- |
UserEventRequest |
Används i händelsetyp för användare | Data, DataType |
DisconnectedEventRequest |
Används i systemhändelsetyp Disconnected |
Anledning |
Kommentar
WebPubSubContext
Även om är en indatabindning ger liknande begärandeserialisera sätt under HttpTrigger
jämförelse med WebPubSubTrigger
, finns det begränsningar, dvs. 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 svarstext och ange anslutningstillstånd med nyckeln ce-connectionstate
i svarshuvudetConnectEventResponse
.
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 SendToAllAction
WebPubSubAction.CreateSendToAllAction()
.
Härledd klass | Egenskaper |
---|---|
SendToAllAction |
Data, DataType, Exkluderade |
SendToGroupAction |
Grupp, Data, DataType, Exkluderad |
SendToUserAction |
UserId, Data, DataType |
SendToConnectionAction |
ConnectionId, Data, DataType |
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 |
ConnectionId, Permission, TargetName |
RevokePermissionAction |
ConnectionId, Permission, TargetName |
Konfiguration
WebPubSub
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 | Connection | Namnet på appinställningen som innehåller Web PubSub Service-niska veze (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: