Azure Web PubSub-eseményindítók és kötések az Azure Functionshez

Ez a hivatkozás bemutatja, hogyan kezelhetők a Web PubSub-események az Azure Functionsben.

A Web PubSub egy Azure által felügyelt szolgáltatás, amellyel a fejlesztők egyszerűen készíthetnek webalkalmazásokat valós idejű funkciókkal és közzétételi feliratkozási mintával.

Action Típus
Függvény futtatása szolgáltatásból érkező üzenetek esetén Trigger kötése
Kötési kérés a célobjektumhoz a Http-eseményindító alatt tárgyalási és felsőbb rétegbeli kérésekhez Bemeneti kötés
Szolgáltatásműveletek meghívása Kimeneti kötés

Forráskód | Csomag | API-referenciadokumentációja | Termékdokumentáció minták |

Hozzáadás a Functions-alkalmazáshoz

Az eseményindító és a kötések használatához a megfelelő csomagra kell hivatkozni. A NuGet-csomag .NET-osztálykódtárakhoz, míg a bővítménycsomagot az összes többi alkalmazástípushoz használja.

Nyelv Hozzáadás... Remarks
C# A NuGet-csomag előzetes verziójának telepítése
C#-szkript, JavaScript, Python, PowerShell Bővítmények explicit telepítése, Bővítménykötegek használata Az Azure Tools bővítmény használata a Visual Studio Code-tal ajánlott.
C#-szkript (csak online az Azure Portalon) Kötés hozzáadása Ha a meglévő kötésbővítményeket a függvényalkalmazás újbóli közzététele nélkül szeretné frissíteni, olvassa el a Bővítmények frissítése című témakört.

Fő fogalmak

Diagram showing the workflow of Azure Web PubSub service working with Function Apps.

(1)-(2) WebPubSubConnection bemeneti kötés a HttpTriggerrel az ügyfélkapcsolat létrehozásához.

(3)-(4) WebPubSubTrigger aktiválja a kötést vagy WebPubSubContext a bemeneti kötést a HttpTriggerrel a szolgáltatáskérés kezeléséhez.

(5)-(6) WebPubSub kimeneti kötés a szolgáltatás kéréséhez, tegyen valamit.

Trigger kötése

A függvényindítóval kezelheti az Azure Web PubSub szolgáltatásból érkező kéréseket.

WebPubSubTrigger akkor használatos, ha a szolgáltatásoldali kéréseket kell kezelnie. Az eseményindító végpontjának mintája az alábbihoz hasonló, amelyet a Web PubSub szolgáltatás oldalán kell beállítani (Portál: beállítások –> eseménykezelő –> URL-sablon). A végponti mintában a lekérdezési rész code=<API_KEY>KÖTELEZŐ, ha biztonsági okokból használja az Azure-függvényalkalmazást. A kulcs az Azure Portalon található. Keresse meg a függvényalkalmazás erőforrását, és lépjen a Functions -Alkalmazáskulcsok ->>Rendszerkulcsok ->webpubsub_extension elemre a függvényalkalmazás Azure-ban való üzembe helyezése után. Ez a kulcs azonban nem szükséges, ha helyi függvényekkel dolgozik.

<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>

Screenshot of get function system keys.

Példa

[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 a kötés támogatja a visszatérési értéket a szinkronizálási forgatókönyvekben, például a rendszer Connect - és felhasználói eseményekben, amikor a kiszolgáló ellenőrizheti és elutasíthatja az ügyfélkérést, vagy üzeneteket küldhet közvetlenül a hívónak. Connecta rendszer figyelmen kívül hagyja az aktuális forgatókönyvnek nem megfelelő eseménymegfeleltetéseket ConnectEventResponseUserEventResponseEventErrorResponse, valamint a felhasználói eseményeket és EventErrorResponsea többi típust. EventErrorResponse Ha a rendszer visszaadja, a szolgáltatás megszakad az ügyfélkapcsolattal.

[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
    [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
    return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}

Attribútumok és széljegyzetek

C #-osztálykódtárakban használja az WebPubSubTrigger attribútumot.

Íme egy WebPubSubTrigger attribútum egy metódus-aláírásban:

[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")] 
    WebPubSubConnectionContext context, ILogger log)
{
    ...
}

A teljes példáért tekintse meg a C# példát.

Konfiguráció

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Leírás
type n.a. Kötelező – a beállításnak webPubSubTriggera következőnek kell lennie: .
direction n.a. Kötelező – a beállításnak ina következőnek kell lennie: .
név n.a. Kötelező – az eseményadatokat fogadó paraméter függvénykódjában használt változónév.
Hub Hub Kötelező – az értéket a Web PubSub Hub nevére kell állítani a függvény aktiválásához. Támogatjuk az attribútum értékének magasabb prioritásként való beállítását, vagy az alkalmazásbeállításokban globális értékként is megadható.
eventType WebPubSubEventType Kötelező – az értéket az aktiválni kívánt függvény üzeneteinek eseménytípusaként kell beállítani. Az értéknek vagy user a system.
eventName Eseménynév Kötelező – az értéket a aktiválni kívánt függvény üzeneteinek eseményeként kell beállítani.
Eseménytípus esetén system az esemény nevének a ( , connected) disconnectedmezőben kell lennieconnect.
A felhasználó által definiált alprotocolok esetében az esemény neve message.
A rendszer által támogatott alprotocol json.webpubsub.azure.v1.esetében az esemény neve felhasználó által definiált eseménynév.
Kapcsolat Connection Nem kötelező – az Azure Web PubSub szolgáltatást meghatározó alkalmazásbeállítások vagy beállításgyűjtemény neve. Az érték az aláírás ellenőrzéséhez használatos. Az érték automatikusan fel van oldva a "WebPubSub Csatlakozás ionString" alkalmazásbeállításokkal. Ez null azt jelenti, hogy az ellenőrzésre nincs szükség, és mindig sikerül.

Használat

A C#- WebPubSubEventRequest ban a típus által felismert kötési paraméter, a többi paramétert paraméternév köti össze. Ellenőrizze az alábbi táblázatot az elérhető paraméterekről és típusokról.

Gyengén gépelt nyelven, name például a JavaScriptben function.json az alábbi leképezési táblázat eseményindító objektumának kötésére szolgál. És tiszteletben kell tartania dataTypefunction.json , hogy ennek megfelelően konvertálja az üzeneteket, amikor name az eseményindító bemenet kötési objektumaként van beállítva data . Az összes paraméter beolvasható és context.bindingData.<BindingName> konvertálható JObject .

Kötés neve Kötéstípus Leírás Tulajdonságok
kérés WebPubSubEventRequest A felsőbb rétegbeli kérés ismertetése A tulajdonság különböző eseménytípusok szerint különbözik, beleértve a származtatott osztályokatConnectEventRequest, ConnectedEventRequestUserEventRequest ésDisconnectedEventRequest
connectionContext WebPubSubConnectionContext Gyakori kérésadatok EventType, EventName, Hub, Csatlakozás ionId, UserId, Headers, Origin, Signature, States
adatok BinaryData,string,Stream,byte[] Üzenetadatok kérése az ügyféltől a felhasználói message eseményben -
Adattípus WebPubSubDataType Üzenet adattípusának kérése, amely támogatja binarya , textjson -
jogcímek IDictionary<string, string[]> Felhasználói jogcímek a rendszerkérelemben connect -
Lekérdezés IDictionary<string, string[]> Felhasználói lekérdezés a rendszerkérésben connect -
alprotocolok IList<string> Elérhető alprotocolok a rendszerkérésben connect -
clientCertificates IList<ClientCertificate> A rendszerkérelemben connect szereplő ügyfelek tanúsítvány-ujjlenyomatának listája -
reason string A rendszerkérés disconnected oka -

Fontos

A C#-ban több támogatott paramétert is be kell állítani az elsőbe, vagyis requestdata az alapértelmezett BinaryData típustól eltérő típust a függvénykötés helyessé tétele érdekében.

Válasz visszaküldése

WebPubSubTrigger tiszteletben tartja az ügyfél által visszaadott választ a szinkronizálási eseményekre és a connect felhasználói eseményekre vonatkozóan. A rendszer csak a megfelelő választ küldi vissza a szolgáltatásnak, ellenkező esetben a rendszer figyelmen kívül hagyja. Emellett a WebPubSubTrigger return objektum támogatja a SetState()ClearStates() felhasználókat a kapcsolat metaadatainak kezeléséhez és kezeléséhez. A bővítmény pedig egyesíti a visszatérési érték eredményeit a kérésből WebPubSubConnectionContext.Statesszármazó eredeti értékekkel. A meglévő kulcs értékét felülírja a rendszer, és új kulcsban lévő értéket ad hozzá.

Return Type Leírás Tulajdonságok
ConnectEventResponse Eseményre adott connect válasz Csoportok, szerepkörök, UserId, Subprotocol
UserEventResponse Válasz felhasználói eseményre DataType, Data
EventErrorResponse Hibaválasz a szinkronizálási eseményhez Code, ErrorMessage
*WebPubSubEventResponse A bizonytalan visszatérési esetekhez használt támogatottak alapválasztípusa -

Bemeneti kötés

A bővítmény két bemeneti kötést biztosít, amely különböző igényeket céloz meg.

  • WebPubSubConnection

    Ahhoz, hogy egy ügyfél csatlakozzon az Azure Web PubSub Service-hez, ismernie kell a szolgáltatásvégpont URL-címét és egy érvényes hozzáférési jogkivonatot. A WebPubSubConnection bemeneti kötés létrehozza a szükséges információkat, így az ügyfélnek nem kell kezelnie ezt a jogkivonat-létrehozást. Mivel a jogkivonat időkorlátos, és egy adott felhasználó hitelesítésére használható egy kapcsolathoz, ne gyorsítótárazza a jogkivonatot, és ne ossza meg az ügyfelek között. A bemeneti kötéssel működő HTTP-eseményindítók segítségével az ügyfelek lekérhetik a kapcsolati adatokat.

  • WebPubSubContext

    A Static Web Apps HttpTrigger használata esetén ez az egyetlen támogatott eseményindító, és a Web PubSub-forgatókönyvben a WebPubSubContext bemeneti kötés segítségével a felhasználók a Web PubSub protokollok szolgáltatásoldaláról deszerializálhatják a felsőbb rétegbeli HTTP-kéréseket. Így az ügyfelek hasonló eredményeket kaphatnak a függvények egyszerű kezeléséhez képest WebPubSubTrigger . Lásd az alábbi példákat . A használat során HttpTriggeraz ügyfélnek ennek megfelelően kell konfigurálnia a HttpTrigger által közzétett URL-címet az eseménykezelőben.

Példa- WebPubSubConnection

Az alábbi példa egy C# függvényt mutat be, amely a bemeneti kötés használatával szerzi be a Web PubSub kapcsolati adatait, és HTTP-n keresztül adja vissza. Az alábbi példában a rendszer a következőhöz hasonló ?userid={User-A}ügyfélkérési lekérdezési részen keresztül adja át a UserId rendszer.

[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubConnection(Hub = "<hub>", UserId = "{query.userid}")] WebPubSubConnection connection)
{
    return connection;
}

Hitelesített jogkivonatok

Ha a függvényt hitelesített ügyfél aktiválja, hozzáadhat egy felhasználói azonosító jogcímet a létrehozott jogkivonathoz. Az App Service-hitelesítéssel egyszerűen hozzáadhat hitelesítést egy függvényalkalmazáshoz.

Az App Service Authentication beállítja a http-fejléceket, x-ms-client-principal-id amelyek x-ms-client-principal-name tartalmazzák a hitelesített felhasználó ügyfélnév-azonosítóját és nevét.

A kötés UserId tulajdonságát egy kötési kifejezéssel állíthatja be a fejlécből származó értékre: {headers.x-ms-client-principal-id} vagy {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;
}

Megjegyzés:

A kötési paramétertípusok nem támogatják a lista vagy tömb átadásának módját, az WebPubSubConnection SDK nem támogatja teljes mértékben a kiszolgáló SDK-jának összes paraméterét, különösen roles, és tartalmazza groups és expiresAfter. Abban az esetben, ha az ügyfélnek szerepköröket kell hozzáadnia, vagy késleltetnie kell a hozzáférési jogkivonat összeállítását a függvényben, javasoljuk, hogy működjön együtt a C#-hoz készült kiszolgálói SDK-val.

[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);
}

Példa- WebPubSubContext

Az alábbi példa egy C# függvényt mutat be, amely a Web PubSub felsőbb rétegbeli kérésadatait az eseménytípus alatti connect bemeneti kötéssel szerzi be, és HTTP-n keresztül adja vissza.

[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;
}

Konfiguráció

WebPubSub Csatlakozás ion

Az alábbi táblázat a function.json fájlban és WebPubSubConnection az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Leírás
type n.a. A következő értékre kell állítani: webPubSubConnection
direction n.a. A következő értékre kell állítani: in
név n.a. A függvénykódban a bemeneti kapcsolat kötési objektumához használt változónév.
Hub Hub Kötelező – Az értéket a Web PubSub Hub nevére kell állítani a függvény aktiválásához. Támogatjuk az attribútum értékének magasabb prioritásként való beállítását, vagy az alkalmazásbeállításokban globális értékként is megadható.
Userid UserId Nem kötelező – a hozzáférési kulcs jogkivonatában beállítani kívánt felhasználói azonosító jogcím értéke.
Kapcsolat Connection Kötelező – A Web PubSub Service kapcsolati sztring tartalmazó alkalmazásbeállítás neve (alapértelmezés szerint "WebPubSub Csatlakozás ionString").

WebPubSubContext

Az alábbi táblázat a functions.json fájlban és WebPubSubContext az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Leírás
type n.a. A beállításnak a webPubSubContextkövetkezőnek kell lennie: .
direction n.a. A beállításnak a inkövetkezőnek kell lennie: .
név n.a. A bemeneti Web PubSub-kérés függvénykódjában használt változónév.
Kapcsolat Connection Nem kötelező – az Azure Web PubSub szolgáltatást meghatározó alkalmazásbeállítások vagy beállításgyűjtemény neve. Az érték a visszaélés elleni védelem és az aláírás ellenőrzéséhez használatos. Az érték automatikusan fel van oldva a "WebPubSub Csatlakozás ionString" beállítással alapértelmezés szerint. Ez null azt jelenti, hogy az ellenőrzésre nincs szükség, és mindig sikerül.

Usage

WebPubSub Csatlakozás ion

WebPubSubConnection az alábbi tulajdonságokat tartalmazza.

Kötés neve Kötéstípus Leírás
BaseUri Uri Web PubSub ügyfélkapcsolati uri.
Uri Uri A Web PubSub-kapcsolat abszolút URI-ja a kérelem alapján létrehozott bázist tartalmazza AccessToken .
AccessToken sztring A kérelem felhasználói azonosítója és a szolgáltatás adatai alapján jön AccessToken létre.

WebPubSubContext

WebPubSubContext az alábbi tulajdonságokat tartalmazza.

Kötés neve Kötéstípus Leírás Tulajdonságok
kérés WebPubSubEventRequest Az ügyféltől érkező kérés részleteiért tekintse meg az alábbi táblázatot. WebPubSubConnectionContext a kérelem fejlécéből és a kérelem törzséből deszerializált egyéb tulajdonságokból írja le a kérést, például Reason : DisconnectedEventRequest.
válasz HttpResponseMessage A bővítmény elsősorban az esetekre és hibákra AbuseProtection épít választ. -
errorMessage sztring Írja le a hiba részleteit a felsőbb rétegbeli kérés feldolgozásakor. -
hasError logikai Jelölő, amely jelzi, hogy érvényes Web PubSub upstream kérés-e. -
isPreflight logikai Jelző, amely jelzi, hogy a kérelem előzetes kérése-e AbuseProtection. -

Mert WebPubSubEventRequesta rendszer deszerializálja a különböző osztályokra, amelyek különböző információkat nyújtanak a kérési forgatókönyvről. Érvényes esetek esetén PreflightRequest a felhasználó ellenőrizheti a jelzőket IsPreflight , és HasError értesülhet róla. Javasoljuk, hogy közvetlenül adja vissza a rendszer összeállítási válaszát WebPubSubContext.Response , vagy az ügyfél igény szerint naplózhatja a hibákat. Különböző esetekben az ügyfél az alábbiak szerint elolvashatja a kérelem tulajdonságait.

Származtatott osztály Leírás Tulajdonságok
PreflightRequest Akkor használatos, AbuseProtection ha IsPreflight igaz -
ConnectEventRequest Rendszeresemény-típusban Connect használatos Jogcímek, lekérdezések, alprojektek, ClientCertificates
ConnectedEventRequest Rendszeresemény-típusban Connected használatos -
UserEventRequest A felhasználói eseménytípusban használatos Data, DataType
DisconnectedEventRequest Rendszeresemény-típusban Disconnected használatos Reason

Megjegyzés:

Bár a WebPubSubContext bemeneti kötés hasonló kérések deszerializálását teszi lehetővé az összehasonlítás WebPubSubTriggersoránHttpTrigger, vannak korlátozások, azaz a kapcsolati állapot egyesítés utáni állapota nem támogatott. A visszatérési választ továbbra is tiszteletben tartja a szolgáltatásoldal, de a felhasználóknak maguknak kell létrehozniuk a választ. Ha a felhasználóknak be kell állítaniuk az eseményválaszt, választörzsként vissza kell küldenie a felhasználói eseményt HttpResponseMessage tartalmazó ConnectEventResponse vagy üzeneteket, és a válaszfejlécben kulcsra ce-connectionstate kell helyeznie a kapcsolati állapotot.

Kimeneti kötés

A Web PubSub kimeneti kötés használatával meghívhatja az Azure Web PubSub szolgáltatást, hogy tegyen valamit. Üzenetet a következő címzettek számára közvetíthet:

  • Minden csatlakoztatott ügyfél
  • Csatlakozás egy adott felhasználónak hitelesített ügyfelek
  • Csatlakozás ügyfelek egy adott csoportban csatlakoztak
  • Egy adott ügyfélkapcsolat

A kimeneti kötés lehetővé teszi az ügyfelek és csoportok kezelését is, valamint engedélyek megadását/visszavonását, amelyek egy adott connectionId-et céloznak meg a csoporttal.

  • Kapcsolat hozzáadása csoporthoz
  • Felhasználó hozzáadása csoporthoz
  • Kapcsolat eltávolítása csoportból
  • Felhasználó eltávolítása csoportból
  • Felhasználó eltávolítása az összes csoportból
  • Az összes ügyfélkapcsolat bezárása
  • Adott ügyfélkapcsolat bezárása
  • Kapcsolatok bezárása egy csoportban
  • Kapcsolat engedélyének megadása
  • Kapcsolat engedélyének visszavonása

A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.

Példa

[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 a kimeneti kötések alap absztrakciós típusa. A származtatott típusok azt a műveletkiszolgálót jelölik, amelyet a szolgáltatás meghívni szeretne.

C# nyelven biztosítunk néhány statikus módszert WebPubSubAction az elérhető műveletek felderítéséhez. A felhasználó létrehozhatja például a SendToAllAction hívással WebPubSubAction.CreateSendToAllAction().

Származtatott osztály Tulajdonságok
SendToAllAction Data, DataType, Excluded
SendToGroupAction Csoport, adat, adattípus, kizárt
SendToUserAction UserId, Data, DataType
SendToConnectionAction Csatlakozás ionId, Data, DataType
AddUserToGroupAction UserId, Group
RemoveUserFromGroupAction UserId, Group
RemoveUserFromAllGroupsAction UserId
AddConnectionToGroupAction Csatlakozás ionId, Group
RemoveConnectionFromGroupAction Csatlakozás ionId, Group
CloseAllConnectionsAction Kizárva, ok
CloseClientConnectionAction Csatlakozás ionId, Reason
CloseGroupConnectionsAction Csoport, Kizárt, Ok
GrantPermissionAction Csatlakozás ionId, Engedély, TargetName
RevokePermissionAction Csatlakozás ionId, Engedély, TargetName

Konfiguráció

WebPubSub

Az alábbi táblázat a function.json fájlban és WebPubSub az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Leírás
type n.a. A következő értékre kell állítani: webPubSub
direction n.a. A következő értékre kell állítani: out
név n.a. A kimeneti kötési objektum függvénykódjában használt változónév.
Hub Hub A függvény aktiválásához az értéket a Web PubSub Hub nevére kell állítani. Támogatjuk az attribútum értékének magasabb prioritásként való beállítását, vagy az alkalmazásbeállításokban globális értékként is megadható.
Kapcsolat Connection A Web PubSub Service kapcsolati sztring tartalmazó alkalmazásbeállítás neve (alapértelmezés szerint "WebPubSub Csatlakozás ionString").

Hibaelhárítás

Konzolnaplózás beállítása

A konzolnaplózást is egyszerűen engedélyezheti, ha mélyebbre szeretné ásni a szolgáltatással kapcsolatos kéréseket.

További lépések

Használja ezeket az erőforrásokat a saját alkalmazás létrehozásához: