Trigger a vazby azure Web PubSub pro Azure Functions

Tento odkaz vysvětluje, jak zpracovávat události Web PubSub ve službě Azure Functions.

Web PubSub je služba spravovaná v Azure, která vývojářům pomáhá snadno vytvářet webové aplikace s funkcemi v reálném čase a vzorem publikování a odběru.

Akce Typ
Spuštění funkce, když zprávy pocházejí ze služby Vazba triggeru
Vytvoření vazby požadavku na cílový objekt v rámci triggeru HTTP pro vyjednávání a upstreamové požadavky Vstupní vazba
Vyvolání akcí provádění služby Výstupní vazba

Referenční dokumentace k rozhraní API balíčku | zdrojového kódu | – Ukázky produktové dokumentace | |

Přidání do aplikace Functions

Práce s triggerem a vazbami vyžaduje odkaz na příslušný balíček. Balíček NuGet se používá pro knihovny tříd .NET, zatímco sada rozšíření se používá pro všechny ostatní typy aplikací.

Jazyk Přidat uživatelem... Poznámky
C# Instalace balíčku NuGet, předběžné verze
Skript jazyka C#, JavaScript, Python, PowerShell Explicitní instalace rozšíření, použití sad rozšíření Rozšíření Azure Tools se doporučuje používat se sadou Visual Studio Code.
Skript jazyka C# (pouze online na webu Azure Portal) Přidání vazby Pokud chcete aktualizovat existující rozšíření vazeb, aniž byste museli znovu publikovat aplikaci funkcí, přečtěte si téma Aktualizace rozšíření.

Klíčové koncepty

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

(1)-(2) WebPubSubConnection vstupní vazba s HttpTriggerem pro generování připojení klienta.

(3)-(4) WebPubSubTrigger aktivační vazby nebo WebPubSubContext vstupní vazby s HttpTriggerem pro zpracování požadavku služby.

(5)-(6) WebPubSub výstupní vazba pro vyžádání služby něco udělat.

Vazba triggeru

Pomocí triggeru funkce můžete zpracovávat požadavky ze služby Azure Web PubSub.

WebPubSubTrigger se používá, když potřebujete zpracovávat požadavky ze strany služby. Vzor koncového bodu triggeru by měl být podobný následujícímu, který by se měl nastavit na straně služby Web PubSub (portál: nastavení –> obslužná rutina události –> šablona adresy URL). Ve vzoru koncového bodu se část code=<API_KEY> dotazu vyžaduje, pokud používáte aplikaci Azure Function App z bezpečnostních důvodů. Klíč najdete na webu Azure Portal. Najděte prostředek aplikace funkcí a po nasazení aplikace funkcí do Azure přejděte na Functions ->App keys ->System keys ->webpubsub_extension. I když pracujete s místními funkcemi, tento klíč není potřeba.

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

Screenshot of get function system keys.

Příklad

[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 Vazba také podporuje návratovou hodnotu ve scénářích synchronizace, například událost systému Connect a uživatele, kdy server může zkontrolovat a odepřít požadavek klienta nebo odesílat zprávy volajícímu přímo. Connect respektuje ConnectEventResponse události a EventErrorResponsea uživatelská událost respektuje UserEventResponse a EventErrorResponse, typy rest, které neodpovídají aktuálnímu scénáři, se ignorují. A pokud EventErrorResponse se vrátí, služba připojení klienta zahodí.

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

Atributy a poznámky

V knihovnách tříd jazyka WebPubSubTrigger C# použijte atribut.

Tady je WebPubSubTrigger atribut v podpisu metody:

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

Úplný příklad najdete v příkladu jazyka C#.

Konfigurace

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json .

function.json – vlastnost Vlastnost atributu Popis
type Není k dispozici Povinné – musí být nastaveno na webPubSubTriggerhodnotu .
direction Není k dispozici Povinné – musí být nastaveno na inhodnotu .
Jméno Není k dispozici Povinné – název proměnné použité v kódu funkce pro parametr, který přijímá data události.
Rozbočovač Centrum Povinný argument – hodnota musí být nastavena na název centra Web PubSub, aby se funkce aktivovala. Podporujeme nastavení hodnoty v atributu jako vyšší prioritu nebo ji lze nastavit v nastavení aplikace jako globální hodnotu.
eventType WebPubSubEventType Povinný argument – hodnota musí být nastavena jako typ události zpráv, aby se funkce aktivovala. Hodnota by měla být buď user nebo system.
Eventname EventName Povinný argument – hodnota musí být nastavena jako událost zpráv, aby se funkce aktivovala.
Pro system typ události by název události měl být v connect, connected, disconnected.
Pro uživatelem definované dílčíprotokoly je messagenázev události .
V případě systému podporovaného subprotocolu json.webpubsub.azure.v1.je název události definovaný uživatelem.
Připojení Connection Volitelné – název nastavení aplikace nebo nastavení kolekce, která určuje nadřazenou službu Azure Web PubSub. Hodnota se používá k ověření podpisu. A hodnota je automaticky vyřešena nastavením aplikace WebPubSub Připojení ionString ve výchozím nastavení. A null znamená, že ověření není potřeba a vždy proběhne úspěšně.

Použití

V jazyce C# WebPubSubEventRequest je typ rozpoznaný parametr vazby, parametry rest jsou vázané na název parametru. Projděte si následující tabulku dostupných parametrů a typů.

Ve slabě zadaném jazyce, jako je JavaScript, namefunction.json se používá k vytvoření vazby objektu triggeru týkajícího se následující tabulky mapování. A úcta dataTypefunction.json k převodu zprávy odpovídajícím způsobem, pokud name je nastavena jako data vazba objekt pro aktivační vstup. Všechny parametry lze načíst context.bindingData.<BindingName> a JObject převést.

Název vazby Typ vazby Popis Vlastnosti
request WebPubSubEventRequest Popisuje upstreamové požadavky. Vlastnost se liší podle různých typů událostí, včetně odvozených tříd ConnectEventRequest, ConnectedEventRequestUserEventRequest aDisconnectedEventRequest
Connectioncontext WebPubSubConnectionContext Běžné informace o žádostech EventType, EventName, Hub, Připojení ionId, UserId, Headers, Origin, Signature, States
data BinaryData,string,Stream,byte[] Vyžádání dat zpráv z klienta v události uživatele message -
Datatype WebPubSubDataType Požadovat datový typ zprávy, který podporuje binary, text, json -
deklarace identity IDictionary<string, string[]> Deklarace identity uživatelů v systémové connect žádosti -
query IDictionary<string, string[]> Dotaz uživatele v systémovém connect požadavku -
subprotocols IList<string> Dostupné dílčí protokoly v systémovém connect požadavku -
clientCertificates IList<ClientCertificate> Seznam kryptografického otisku certifikátu od klientů v connect systémové žádosti -
reason string Důvod v systémové disconnected žádosti -

Důležité

V jazyce C# musí být do prvního, tj. requestdata jiného než výchozího BinaryData typu, aby byla funkční vazba správně vložena do více typů podporovaných parametrů.

Návratová odpověď

WebPubSubTrigger respektuje odpověď vrácenou zákazníkem pro synchronní události connect a událost uživatele. Odpověď se odešle zpět do služby, jinak se ignoruje. WebPubSubTrigger Kromě toho návratový objekt podporuje uživatele do SetState() a ClearStates() správu metadat pro připojení. A rozšíření sloučí výsledky z návratové hodnoty s původními výsledky z požadavku WebPubSubConnectionContext.States. Hodnota v existujícím klíči se přepíše a přidá se hodnota v novém klíči.

Návratový typ Popis Vlastnosti
ConnectEventResponse Odpověď na connect událost Skupiny, role, userId, subprotocol
UserEventResponse Odpověď na událost uživatele Datový typ, data
EventErrorResponse Chybová odpověď na událost synchronizace Kód, ErrorMessage
*WebPubSubEventResponse Základní typ odpovědi podporovaných pro nejisté případy vrácení -

Vstupní vazba

Naše rozšíření poskytuje dvě vstupní vazby, které cílí na různé potřeby.

  • WebPubSubConnection

    Aby se klient připojil ke službě Azure Web PubSub Service, musí znát adresu URL koncového bodu služby a platný přístupový token. Vstupní WebPubSubConnection vazba vytváří požadované informace, takže klient nemusí zpracovávat samotné generování tokenů. Vzhledem k tomu, že token je časově omezený a dá se použít k ověření konkrétního uživatele pro připojení, neukládejte token do mezipaměti ani ho nesdílejte mezi klienty. Trigger HTTP, který pracuje s touto vstupní vazbou, se dá použít pro klienty k načtení informací o připojení.

  • WebPubSubContext

    Pokud používáte Static Web Apps, HttpTrigger je jediným podporovaným triggerem a ve scénáři Web PubSub poskytujeme WebPubSubContext vstupní vazbu, která uživatelům pomáhá deserializovat nadřazený požadavek HTTP ze strany služby v rámci protokolů Web PubSub. Zákazníci tak můžou získat podobné výsledky v porovnání s WebPubSubTrigger možnostmi snadného zpracování ve funkcích. Příklady najdete níže. Při použití se HttpTriggerzákazníkem vyžaduje, aby v obslužné rutině události odpovídajícím způsobem nakonfigurovali adresu URL vystavenou protokolem HttpTrigger.

Příklad- WebPubSubConnection

Následující příklad ukazuje funkci jazyka C#, která získává informace o připojení Web PubSub pomocí vstupní vazby a vrací ji přes protokol HTTP. V následujícím příkladu se UserId předává prostřednictvím části dotazu na požadavek klienta, například ?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;
}

Ověřené tokeny

Pokud funkci aktivuje ověřený klient, můžete do vygenerovaného tokenu přidat deklaraci ID uživatele. Ověřování můžete snadno přidat do aplikace funkcí pomocí ověřování pomocí služby App Service.

Ověřování služby App Service nastaví hlavičky HTTP pojmenované x-ms-client-principal-id a x-ms-client-principal-name obsahují ID a název instančního objektu ověřeného uživatele.

Vlastnost UserId vazby na hodnotu z hlavičky můžete nastavit pomocí výrazu vazby: {headers.x-ms-client-principal-id} nebo {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;
}

Poznámka:

Omezené na typy parametrů vazby nepodporují způsob předání seznamu ani pole, WebPubSubConnection není plně podporována se všemi sadami SDK serveru parametrů, zejména roles, a také zahrnuje groups a expiresAfter. V případě, že zákazník potřebuje přidat role nebo zpozdit sestavení přístupového tokenu ve funkci, je doporučeno pracovat se serverovou sadou SDK pro jazyk 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);
}

Příklad- WebPubSubContext

Následující příklad ukazuje funkci jazyka C#, která získává informace požadavku Web PubSub upstream pomocí vstupní vazby pod connect typem události a vrací ji přes 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;
}

Konfigurace

WebPubSub Připojení ion

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json a atributu WebPubSubConnection .

function.json – vlastnost Vlastnost atributu Popis
type Není k dispozici Musí být nastaveno na webPubSubConnection
direction Není k dispozici Musí být nastaveno na in
Jméno Není k dispozici Název proměnné použitý v kódu funkce pro vstupní objekt vazby připojení.
Rozbočovač Centrum Povinné – Hodnota musí být nastavena na název centra Web PubSub, aby se funkce aktivovala. Podporujeme nastavení hodnoty v atributu jako vyšší prioritu nebo ji lze nastavit v nastavení aplikace jako globální hodnotu.
Userid ID uživatele Volitelné – hodnota deklarace identity identifikátoru uživatele, která se má nastavit v tokenu přístupového klíče.
Připojení Connection Povinné – název nastavení aplikace, které obsahuje připojovací řetězec služby Web PubSub (výchozí hodnota je "WebPubSub Připojení ionString").

WebPubSubContext

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru functions.json a atributu WebPubSubContext .

function.json – vlastnost Vlastnost atributu Popis
type Není k dispozici Musí být nastavena na webPubSubContexthodnotu .
direction Není k dispozici Musí být nastavena na inhodnotu .
Jméno Není k dispozici Název proměnné použitý v kódu funkce pro vstupní požadavek Web PubSub.
Připojení Connection Volitelné – název nastavení aplikace nebo nastavení kolekce, která určuje nadřazenou službu Azure Web PubSub. Hodnota se používá pro ochranu před zneužitím a ověřování podpisu. Ve výchozím nastavení se hodnota automaticky přeloží na WebPubSub Připojení ionString. A null znamená, že ověření není potřeba a vždy proběhne úspěšně.

Využití

WebPubSub Připojení ion

WebPubSubConnection poskytuje následující vlastnosti.

Název vazby Typ vazby Popis
Baseuri Identifikátor URI Identifikátor URI připojení klienta Web PubSub
Identifikátor URI Identifikátor URI Absolutní identifikátor URI připojení Web PubSub obsahuje AccessToken vygenerovaný základ požadavku.
AccessToken string Vygenerováno AccessToken na základě id uživatele požadavku a informací o službě.

WebPubSubContext

WebPubSubContext poskytuje následující vlastnosti.

Název vazby Typ vazby Popis Vlastnosti
request WebPubSubEventRequest Žádost od klienta, podrobnosti najdete v následující tabulce. WebPubSubConnectionContextz hlavičky požadavku a dalších vlastností deserializovaných z textu požadavku popisují požadavek, Reason například .DisconnectedEventRequest
odpověď HttpResponseMessage Rozšíření sestavuje odpověď hlavně pro AbuseProtection případy chyb a chyby. -
errorMessage string Popište podrobnosti o chybě při zpracování upstreamového požadavku. -
hasError bool Příznak označující, jestli se jedná o platný upstreamový požadavek Web PubSub. -
isPreflight bool Příznak označující, jestli se jedná o předběžný požadavek AbuseProtection. -

V WebPubSubEventRequestpřípadě , je deserializována na různé třídy, které poskytují různé informace o scénáři žádosti. V PreflightRequest případě platných případů může uživatel zkontrolovat příznaky IsPreflight a HasError zjistit je. Navrhuje se vrátit odpověď WebPubSubContext.Response na sestavení systému přímo nebo zákazník může protokolovat chyby na vyžádání. V různých scénářích si zákazník může vlastnosti požadavku přečíst, jak je uvedeno níže.

Odvozená třída Popis Vlastnosti
PreflightRequest Používá se v AbuseProtection případech, kdy IsPreflight je true -
ConnectEventRequest Používá se v Connect systémovém typu události. Deklarace identity, dotaz, subprotocols, ClientCertificates
ConnectedEventRequest Používá se v Connected systémovém typu události. -
UserEventRequest Používá se v typu události uživatele. Data, datový typ
DisconnectedEventRequest Používá se v Disconnected systémovém typu události. Důvod

Poznámka:

I když je vstupní WebPubSubContext vazba, poskytuje podobný způsob deserializace požadavků v porovnání HttpTriggerWebPubSubTriggers , existují omezení, tj. stav připojení po sloučení se nepodporuje. Odpověď na vrácení je stále respektována na straně služby, ale uživatelé vyžadují, aby sami vytvořili odpověď. Pokud uživatelé potřebují nastavit odpověď na událost, měli byste vrátit HttpResponseMessage obsah ConnectEventResponse nebo zprávy pro událost uživatele jako text odpovědi a vložit stav připojení s klíčem ce-connectionstate v hlavičce odpovědi.

Výstupní vazba

K vyvolání služby Azure Web PubSub použijte výstupní vazbu Web PubSub. Zprávu můžete vysílat na:

  • Všichni připojení klienti
  • Připojení klientů ověřených pro konkrétního uživatele
  • Připojení klienti připojení ke konkrétní skupině
  • Konkrétní připojení klienta

Výstupní vazba také umožňuje spravovat klienty a skupiny a také udělit nebo odvolat oprávnění, která cílí na konkrétní ID připojení se skupinou.

  • Přidání připojení ke skupině
  • Přidání uživatele do skupiny
  • Odebrání připojení ze skupiny
  • Odebrání uživatele ze skupiny
  • Odebrání uživatele ze všech skupin
  • Zavření všech klientských připojení
  • Zavření konkrétního připojení klienta
  • Zavření připojení ve skupině
  • Udělení oprávnění připojení
  • Odvolání oprávnění připojení

Informace o nastavení a konfiguraci najdete v přehledu.

Příklad

[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 je základní abstraktní typ výstupních vazeb. Odvozené typy představují server akcí, který má služba vyvolat.

V jazyce C# poskytujeme několik statických metod WebPubSubAction , které vám pomůžou zjistit dostupné akce. Uživatel může například vytvořit SendToAllAction volání WebPubSubAction.CreateSendToAllAction().

Odvozená třída Vlastnosti
SendToAllAction Data, Datový typ, vyloučený
SendToGroupAction Group, Data, DataType, Excluded
SendToUserAction UserId, Data, DataType
SendToConnectionAction Připojení ionId, Data, DataType
AddUserToGroupAction UserId, Group
RemoveUserFromGroupAction UserId, Group
RemoveUserFromAllGroupsAction ID uživatele
AddConnectionToGroupAction Připojení ionId, Skupina
RemoveConnectionFromGroupAction Připojení ionId, Skupina
CloseAllConnectionsAction Vyloučeno, důvod
CloseClientConnectionAction Připojení ionId, Reason
CloseGroupConnectionsAction Skupina, vyloučeno, důvod
GrantPermissionAction Připojení ionId, Permission, TargetName
RevokePermissionAction Připojení ionId, Permission, TargetName

Konfigurace

WebPubSub

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json a atributu WebPubSub .

function.json – vlastnost Vlastnost atributu Popis
type Není k dispozici Musí být nastaveno na webPubSub
direction Není k dispozici Musí být nastaveno na out
Jméno Není k dispozici Název proměnné použitý v kódu funkce pro výstupní objekt vazby.
Rozbočovač Centrum Hodnota musí být nastavena na název centra Web PubSub, aby se funkce aktivovala. Podporujeme nastavení hodnoty v atributu jako vyšší prioritu nebo ji lze nastavit v nastavení aplikace jako globální hodnotu.
Připojení Connection Název nastavení aplikace, které obsahuje službu Web PubSub Service připojovací řetězec (výchozí hodnota je WebPubSub Připojení ionString).

Řešení problému

Nastavení protokolování konzoly

Protokolování konzoly můžete také snadno povolit, pokud chcete podrobněji prozkoumat požadavky, které se službou provádíte.

Další kroky

Pomocí těchto prostředků můžete začít vytvářet vlastní aplikaci: