Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 | – Ukázky produktové dokumentace | |
Přidejte do své aplikace funkcí
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... |
|---|---|
| jazyk C# | Instalujte balíček NuGet, zaměřte se na konkrétní verzi |
| JavaScript, Python, PowerShell, C# skript (jen Azure portal) | Použití sad rozšíření (doporučeno), explicitní instalace rozšíření |
Klíčové koncepty
(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>
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 .
| vlastnost function.json | Vlastnost atributu | Popis |
|---|---|---|
| typ | Není k dispozici | Povinné – musí být nastaveno na webPubSubTriggerhodnotu . |
| směr | 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. |
| typ události | Typ události WebPubSub | 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 | Název Události | 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í | Připojení | 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 WebPubSubConnectionString 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 |
|---|---|---|---|
| žádost | WebPubSubEventRequest |
Popisuje upstreamové požadavky. | Vlastnost se liší podle různých typů událostí, včetně odvozených tříd ConnectEventRequest, ConnectedEventRequestUserEventRequest aDisconnectedEventRequest |
| kontext připojení | WebPubSubConnectionContext |
Běžné informace o žádostech | TypUdálosti, NázevUdálosti, Centrum, IdPřipojení, IdUživatele, Hlavičky, Původ, Podpis, Stavy |
| 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 |
- |
| dotaz | IDictionary<string, string[]> |
Dotaz uživatele v systémovém connect požadavku |
- |
| subprotocoly | IList<string> |
Dostupné dílčí protokoly v systémovém connect požadavku |
- |
| klientské certifikáty | IList<ClientCertificate> |
Seznam kryptografického otisku certifikátu od klientů v connect systémové žádosti |
- |
| důvod | string |
Důvod v systémové disconnected žádosti |
- |
Důležité
V jazyce C# musí.
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.
WebPubSubConnectionAby 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í
WebPubSubConnectionvazba 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í.WebPubSubContextPokud používáte Static Web Apps,
HttpTriggerje jediným podporovaným triggerem a ve scénáři Web PubSub poskytujemeWebPubSubContextvstupní 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í sWebPubSubTriggermožnostmi snadného zpracování ve funkcích. Příklady najdete níže. Při použití seHttpTriggerzá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í typů parametrů pro vazbu neumožňuje předání seznamu ani pole. WebPubSubConnection není plně podporováno se všemi parametry, které serverové SDK obsahuje, zejména roles, a zahrnuje také 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
WebPubSubConnection
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json a atributu WebPubSubConnection .
| vlastnost function.json | Vlastnost atributu | Popis |
|---|---|---|
| typ | Není k dispozici | Musí být nastaveno na webPubSubConnection |
| směr | 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í | Připojení | Povinné – název nastavení aplikace, které obsahuje službu Web PubSub Service připojovací řetězec (výchozí hodnota je "WebPubSubConnectionString"). |
WebPubSubContext
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru functions.json a atributu WebPubSubContext .
| vlastnost function.json | Vlastnost atributu | Popis |
|---|---|---|
| typ | Není k dispozici | Musí být nastavena na webPubSubContexthodnotu . |
| směr | 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í | Připojení | 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 WebPubSubConnectionString. A null znamená, že ověření není potřeba a vždy proběhne úspěšně. |
Využití
WebPubSubConnection
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. |
| Přístupový token | řetězec | 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 |
|---|---|---|---|
| žádost | 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. |
- |
| chybová zpráva | řetězec | Popište podrobnosti o chybě při zpracování upstreamového požadavku. | - |
| hasError | Booleova hodnota | Příznak označující, jestli se jedná o platný upstreamový požadavek Web PubSub. | - |
| isPreflight | Booleova hodnota | 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ž WebPubSubContext je vstupní vazba, která poskytuje podobnou metodu deserializace požadavku jako HttpTrigger, existují určitá omezení; například stav připojení po sloučení není podporován. 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í klienti ověření pro konkrétního uživatele
- Připojení klienti 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 |
Skupina, Data, DatovýTyp, Vyloučeno |
SendToUserAction |
Uživatelské ID, Data, Typ dat |
SendToConnectionAction |
IdentifikátorPřipojení, Data, TypDat |
AddUserToGroupAction |
Uživatelské ID, Skupina |
RemoveUserFromGroupAction |
Uživatelské ID, Skupina |
RemoveUserFromAllGroupsAction |
ID uživatele |
AddConnectionToGroupAction |
ConnectionId, Skupina |
RemoveConnectionFromGroupAction |
ConnectionId, Skupina |
CloseAllConnectionsAction |
Vyloučeno, důvod |
CloseClientConnectionAction |
ID spojení, Důvod |
CloseGroupConnectionsAction |
Skupina, vyloučeno, důvod |
GrantPermissionAction |
IDpřipojení, Oprávnění, NázevCíle |
RevokePermissionAction |
IDpřipojení, Oprávnění, NázevCíle |
Konfigurace
WebPubSub
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json a atributu WebPubSub .
| vlastnost function.json | Vlastnost atributu | Popis |
|---|---|---|
| typ | Není k dispozici | Musí být nastaveno na webPubSub |
| směr | 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í | Připojení | Název nastavení aplikace, které obsahuje službu Web PubSub Service připojovací řetězec (výchozí hodnota je "WebPubSubConnectionString"). |
Ř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: