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
(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 EventErrorResponse
a 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 |
---|---|---|
type | Není k dispozici | Povinné – musí být nastaveno na webPubSubTrigger hodnotu . |
direction | Není k dispozici | Povinné – musí být nastaveno na in hodnotu . |
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 message ná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 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, name
function.json
se používá k vytvoření vazby objektu triggeru týkajícího se následující tabulky mapování. A úcta dataType
function.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 , ConnectedEventRequest UserEventRequest aDisconnectedEventRequest |
connectionContext | WebPubSubConnectionContext |
Běžné informace o žádostech | EventType, EventName, Hub, ConnectionId, 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. request
data
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 poskytujemeWebPubSubContext
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í sWebPubSubTrigger
možnostmi snadného zpracování ve funkcích. Příklady najdete níže. Při použití seHttpTrigger
zá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
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 |
---|---|---|
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 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 |
---|---|---|
type | Není k dispozici | Musí být nastavena na webPubSubContext hodnotu . |
direction | Není k dispozici | Musí být nastavena na in hodnotu . |
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 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. |
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. | WebPubSubConnectionContext z 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 WebPubSubEventRequest
pří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í HttpTrigger
WebPubSubTrigger
s , 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í 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 |
Group, Data, DataType, Excluded |
SendToUserAction |
UserId, Data, DataType |
SendToConnectionAction |
ConnectionId, Data, DataType |
AddUserToGroupAction |
UserId, Group |
RemoveUserFromGroupAction |
UserId, Group |
RemoveUserFromAllGroupsAction |
ID uživatele |
AddConnectionToGroupAction |
ConnectionId, Group |
RemoveConnectionFromGroupAction |
ConnectionId, Group |
CloseAllConnectionsAction |
Vyloučeno, důvod |
CloseClientConnectionAction |
ConnectionId, Reason |
CloseGroupConnectionsAction |
Skupina, vyloučeno, důvod |
GrantPermissionAction |
ConnectionId, Permission, TargetName |
RevokePermissionAction |
ConnectionId, Permission, TargetName |
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 |
---|---|---|
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 "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: