Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta referência explica como manipular eventos Web PubSub no Azure Functions.
O Web PubSub é um serviço gerenciado pelo Azure que ajuda os desenvolvedores a criar facilmente aplicativos Web com recursos em tempo real e padrão de publicação-assinatura.
| Ação | Tipo |
|---|---|
| Executar uma função quando as mensagens chegam do serviço | Vinculação de gatilho |
| Vincular solicitação ao objeto de destino sob gatilho HTTP para negociação e solicitações upstream | Vinculação de entrada |
| Invocar serviço para realizar ações | Vinculação de saída |
Adicionar à sua aplicação de funções
Para trabalhar com o acionador e as associações, é necessário referir o pacote apropriado. O pacote NuGet é usado para bibliotecas de classes .NET, enquanto um pacote de extensão é usado para todos os outros tipos de aplicativos.
| Linguagem | Adicionar através de... |
|---|---|
| C# | Instalar o pacote NuGet, versão específica de destino |
| JavaScript, Python, PowerShell, script C# (somente portal do Azure) | Utilize pacotes de extensões (recomendado), instale extensões explicitamente |
Conceitos-chave
(1)-(2) WebPubSubConnection associação de entrada com HttpTrigger para gerar ligação de cliente.
(3)-(4) WebPubSubTrigger acionar a ligação ou WebPubSubContext a ligação de entrada com HttpTrigger para lidar com a solicitação de serviço.
(5)-(6) WebPubSub ligação de saída para solicitar que o serviço realize uma ação.
Vinculação de gatilho
Use o gatilho de função para lidar com solicitações do serviço Azure Web PubSub.
WebPubSubTrigger é usado quando você precisa lidar com solicitações do lado do serviço. O padrão de ponto de extremidade do gatilho seria como abaixo, que deve ser definido no lado do serviço Web PubSub (Portal: configurações -> manipulador de eventos -> Modelo de URL). No padrão de ponto de extremidade, a parte de consulta code=<API_KEY> é NECESSÁRIA quando se utiliza o Azure Function App por motivos de segurança. A chave pode ser encontrada no portal do Azure. Encontre o seu recurso de aplicação de função e navegue até Funções ->Chaves de aplicação ->Chaves do sistema ->webpubsub_extension após a implementação da aplicação de função no Azure. No entanto, essa chave não é necessária quando você está trabalhando com funções locais.
<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>
Exemplo
[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 vinculação também oferece suporte ao valor de retorno em cenários de sincronização, por exemplo, evento do sistema Connect e do usuário, quando o servidor pode verificar e negar a solicitação do cliente ou enviar mensagens diretamente para o chamador.
Connect O evento respeita ConnectEventResponse e EventErrorResponse; o evento do utilizador respeita UserEventResponse e EventErrorResponse; os tipos restantes que não correspondem ao cenário atual são ignorados. E se EventErrorResponse for retornado, o serviço descarta a conexão do cliente.
[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
[WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}
Atributos e anotações
Em bibliotecas de classes C#, use o atributo WebPubSubTrigger .
Aqui está um WebPubSubTrigger atributo em uma assinatura de método:
[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")]
WebPubSubConnectionContext context, ILogger log)
{
...
}
Para obter um exemplo completo, consulte Exemplo de C#.
Configuração
A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json .
| propriedade function.json | Propriedade de Atributo | Descrição |
|---|---|---|
| tipo | n/d | Obrigatório - deve ser definido como webPubSubTrigger. |
| direção | n/d | Obrigatório - deve ser definido como in. |
| Nome | n/d | Obrigatório - o nome da variável usada no código de função para o parâmetro que recebe os dados do evento. |
| hub | Núcleo | Obrigatório - o valor deve ser definido como o nome do hub Web PubSub para que a função seja acionada. Suportamos definir o valor no atributo como prioridade mais alta, ou ele pode ser definido nas configurações do aplicativo como um valor global. |
| TipoDeEvento | WebPubSubEventType | Obrigatório - o valor deve ser definido como o tipo de evento de mensagens para que a função seja acionada. O valor deve ser user ou system. |
| nome_do_evento | Nome do Evento | Obrigatório - o valor deve ser definido como o evento de mensagens para que a função seja acionada.
Para system o tipo de evento, o nome do evento deve estar em connect, connected, disconnected.
Para subprotocolos definidos pelo usuário, o nome do evento é message.
Para o subprotocolo json.webpubsub.azure.v1.suportado pelo sistema, o nome do evento é o nome do evento definido pelo usuário. |
| conexão | Conexão | Opcional - o nome de definições de aplicativo ou de uma coleção de definições que especifica o serviço Azure Web PubSub upstream. O valor é usado para validação de assinatura. E o valor é resolvido automaticamente com as configurações do aplicativo "WebPubSubConnectionString" por padrão. E null significa que a validação não é necessária e sempre bem-sucedida. |
Utilizações
Em C#, WebPubSubEventRequest é um parâmetro de ligação reconhecido por tipo; os parâmetros restantes são vinculados pelo nome do parâmetro. Verifique a tabela abaixo dos parâmetros e tipos disponíveis.
Em linguagem fracamente tipada como JavaScript, name in function.json é usado para vincular o objeto trigger em relação à tabela de mapeamento abaixo. E respeite dataType para converter a mensagem de acordo com function.json quando name é definido como o objeto de ligação data para entrada de gatilho. Todos os parâmetros podem ser lidos context.bindingData.<BindingName> e são JObject convertidos.
| Nome da vinculação | Tipo de Ligação | Descrição | Propriedades |
|---|---|---|---|
| pedido | WebPubSubEventRequest |
Descreve a solicitação upstream | A propriedade varia por diversos tipos de eventos, incluindo classes derivadas ConnectEventRequest, ConnectedEventRequest, UserEventRequest e DisconnectedEventRequest |
| contextoDeConexão | WebPubSubConnectionContext |
Pedido comum de informações | EventType, EventName, Hub, ConnectionId, UserId, Cabeçalhos, Origem, Assinatura, Estados |
| dados |
BinaryData,string,Stream,byte[] |
Solicitar dados de mensagem do cliente no evento do usuário message |
- |
| Tipo de dados | WebPubSubDataType |
Tipo de dados da mensagem de pedido, que suporta binary, text, json |
- |
| afirmações | IDictionary<string, string[]> |
Declarações do usuário na solicitação do sistema connect |
- |
| consulta | IDictionary<string, string[]> |
Consulta do usuário na solicitação do sistema connect |
- |
| Subprotocolos | IList<string> |
Subprotocolos disponíveis na solicitação do sistema connect |
- |
| clientCertificados | IList<ClientCertificate> |
Uma lista de impressões digitais de certificados de clientes no pedido do sistema connect |
- |
| razão | string |
Motivo na solicitação do sistema disconnected |
- |
Importante
Em C#, vários tipos de parâmetros suportados DEVEM ser colocados como o primeiro, ou seja, request, data diferente do tipo padrão BinaryData, para que a função seja vinculada corretamente.
Resposta de retorno
WebPubSubTrigger respeita a resposta retornada do cliente para eventos síncronos de connect e evento do usuário. Apenas a resposta correspondente é enviada de volta ao serviço, caso contrário, é ignorada. Além disso, WebPubSubTrigger o objeto de retorno suporta usuários para SetState() e ClearStates() para gerenciar os metadados para a conexão. E a extensão mescla os resultados do valor de retorno com os originais da solicitação WebPubSubConnectionContext.States. O valor na chave existente é substituído e o valor na nova chave é adicionado.
| Tipo de Retorno | Descrição | Propriedades |
|---|---|---|
ConnectEventResponse |
Resposta ao evento connect |
Grupos, Funções, UserId, Subprotocolo |
UserEventResponse |
Resposta para evento do usuário | DataType, Dados |
EventErrorResponse |
Resposta de erro para o evento de sincronização | Código, MensagemDeErro |
*WebPubSubEventResponse |
Tipo de resposta de base dos suportados usados para casos de retorno incerto | - |
Vinculação de entrada
Nossa extensão fornece duas ligações de entrada direcionadas para necessidades diferentes.
WebPubSubConnectionPara permitir que um cliente se conecte ao Serviço Azure Web PubSub, ele deve saber a URL do ponto de extremidade do serviço e um token de acesso válido. A
WebPubSubConnectionligação de entrada produz as informações necessárias, portanto, o cliente não precisa lidar com essa geração de token em si. Como o token é limitado no tempo e pode ser usado para autenticar um usuário específico em uma conexão, não armazene o token em cache ou compartilhe-o entre clientes. Um gatilho HTTP trabalhando com esta associação de entrada pode ser usado para os clientes obterem as informações de conexão.WebPubSubContextAo utilizar o Static Web Apps,
HttpTriggeré o único gatilho suportado e no cenário Web PubSub, fornecemos a ligação de entradaWebPubSubContext, que ajuda os utilizadores a desserializar a solicitação HTTP upstream do lado do serviço, sob os protocolos Web PubSub. Assim, os clientes podem obter resultados semelhantes em comparação comWebPubSubTriggere manusear facilmente em funções. Veja exemplos abaixo. Quando usado comHttpTrigger, o cliente precisa configurar a HttpTrigger URL exposta no manipulador de eventos de acordo.
Exemplo - WebPubSubConnection
O exemplo a seguir mostra uma função C# que adquire informações de conexão Web PubSub usando a associação de entrada e as retorna por HTTP. No exemplo abaixo, o UserId é passado através da parte de consulta em uma solicitação do cliente, como ?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;
}
Tokens autenticados
Se a função for acionada por um cliente autenticado, você poderá adicionar uma declaração de ID de usuário ao token gerado. Você pode facilmente adicionar autenticação a um aplicativo de função usando a Autenticação do Serviço de Aplicativo.
A Autenticação do Serviço de Aplicativo define cabeçalhos HTTP nomeados x-ms-client-principal-id e x-ms-client-principal-name que contêm o ID principal e o nome do cliente do usuário autenticado, respectivamente.
Você pode definir a propriedade UserId da associação para o valor de qualquer cabeçalho usando uma expressão de ligação: {headers.x-ms-client-principal-id} ou {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;
}
Nota
Os tipos de parâmetros de vinculação limitados não suportam uma forma de passar lista nem matriz, o WebPubSubConnection não é totalmente suportado com todos os parâmetros que o SDK do servidor possui, especialmente roles, além de incluir groups e expiresAfter. Caso o cliente precise adicionar funções ou atrasar a criação do token de acesso na função, sugere-se trabalhar com o SDK do servidor para 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);
}
Exemplo - WebPubSubContext
O exemplo a seguir mostra uma função em C# que adquire informações da solicitação upstream do Web PubSub usando a associação de entrada com o tipo de evento connect e as retorna por 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;
}
Configuração
ConexãoWebPubSub
A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json e no WebPubSubConnection atributo.
| propriedade function.json | Propriedade de Atributo | Descrição |
|---|---|---|
| tipo | n/d | Deve ser definido como webPubSubConnection |
| direção | n/d | Deve ser definido como in |
| Nome | n/d | Nome da variável usado no código da função para o objeto de ligação de conexão de entrada. |
| hub | Núcleo | Obrigatório - O valor deve ser definido como o nome do hub Web PubSub para que a função seja acionada. Suportamos definir o valor no atributo como prioridade mais alta, ou ele pode ser definido nas configurações do aplicativo como um valor global. |
| userId | Id do usuário | Opcional - o valor da declaração de identificador de usuário a ser definido no token de chave de acesso. |
| conexão | Conexão | Obrigatório - O nome da configuração do aplicativo que contém a cadeia de conexão do Serviço Web PubSub (o padrão é "WebPubSubConnectionString"). |
WebPubSubContext
A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo functions.json e no WebPubSubContext atributo.
Utilização
WebPubSubConnection
WebPubSubConnection fornece as propriedades abaixo.
| Nome da vinculação | Tipo de Ligação | Descrição |
|---|---|---|
| BaseUri | URI | URI de ligação do cliente Web PubSub. |
| URI | URI | URI absoluto da conexão Web PubSub, gerada com base na solicitação, contém AccessToken. |
| AccessToken | cadeia (de caracteres) | Gerado AccessToken com base no userid da solicitação e nas informações de serviço. |
WebPubSubContext
WebPubSubContext fornece as propriedades abaixo.
| Nome da vinculação | Tipo de Ligação | Descrição | Propriedades |
|---|---|---|---|
| pedido | WebPubSubEventRequest |
Solicitação do cliente, consulte a tabela abaixo para obter detalhes. |
WebPubSubConnectionContext do cabeçalho da solicitação e outras propriedades desserializadas do corpo da solicitação descrevem a solicitação, por exemplo, Reason para DisconnectedEventRequest. |
| resposta | HttpResponseMessage |
A extensão cria resposta principalmente para casos de AbuseProtection e de erros. |
- |
| mensagem de erro | cadeia (de caracteres) | Descreva os detalhes do erro ao processar a solicitação upstream. | - |
| hasError | booleano | Sinalizador para indicar se é uma solicitação upstream válida do Web PubSub. | - |
| isPré-vôo | booleano | Sinalizador para indicar se é um pedido preflight de AbuseProtection. |
- |
Para o WebPubSubEventRequest, é desserializado para classes diferentes que fornecem diferentes informações sobre o cenário do pedido. Para PreflightRequest casos não válidos, o utilizador pode verificar os sinais IsPreflight e HasError para saber. Sugere-se retornar a resposta WebPubSubContext.Response de compilação do sistema diretamente, ou o cliente pode registrar erros sob demanda. Em diferentes cenários, o cliente pode ler as propriedades da solicitação como abaixo.
| Classe derivada | Descrição | Propriedades |
|---|---|---|
PreflightRequest |
Usado em AbuseProtection quando IsPreflight é true |
- |
ConnectEventRequest |
Usado no tipo de evento do sistema Connect |
Declarações, Consulta, Subprotocolos, Certificados de Cliente |
ConnectedEventRequest |
Usado no tipo de evento do sistema Connected |
- |
UserEventRequest |
Usado no tipo de evento do usuário | Dados, TipoDeDados |
DisconnectedEventRequest |
Usado no tipo de evento do sistema Disconnected |
Razão |
Nota
Embora o WebPubSubContext seja uma ligação de entrada que fornece um método de desserialização de solicitação semelhante em HttpTrigger em comparação com WebPubSubTrigger, há limitações; isso significa que o estado da conexão pós-mesclagem não é suportado. A resposta de retorno ainda é respeitada pelo lado do serviço, mas os usuários precisam criar a resposta por conta própria. Se os utilizadores tiverem necessidade de definir a resposta do evento, deverá retornar um HttpResponseMessage ou mensagens para o evento do utilizador como corpo de resposta e colocar o estado da conexão com a chave ce-connectionstate no cabeçalho de resposta.
Vinculação de saída
Use a associação de saída Web PubSub para invocar o serviço Azure Web PubSub para fazer algo. Você pode transmitir uma mensagem para:
- Todos os clientes conectados
- Clientes conectados autenticados para um usuário específico
- Clientes conectados ingressaram em um grupo específico
- Uma conexão de cliente específica
A associação de saída também permite gerir clientes e grupos, bem como conceder/revogar permissões direcionadas a IDs de ligação específicos com o grupo.
- Adicionar ligação ao grupo
- Adicionar usuário ao grupo
- Remover conexão de um grupo
- Remover usuário de um grupo
- Remover usuário de todos os grupos
- Feche todas as conexões do cliente
- Fechar uma conexão de cliente específica
- Fechar conexões em um grupo
- Conceder permissão de uma conexão
- Revogar a permissão de uma conexão
Para obter informações sobre detalhes de instalação e configuração, consulte a visão geral.
Exemplo
[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 é o tipo abstrato base de ligações de saída. Os tipos derivados representam a ação que o servidor deseja que o serviço invoque.
Na linguagem C#, fornecemos alguns métodos estáticos WebPubSubAction para ajudar a descobrir as ações disponíveis. Por exemplo, o usuário pode criar o SendToAllAction por chamada WebPubSubAction.CreateSendToAllAction().
| Classe derivada | Propriedades |
|---|---|
SendToAllAction |
Dados, DataType, Excluídos |
SendToGroupAction |
Grupo, Dados, Tipo de Dado, Excluído |
SendToUserAction |
UserId, Dados, TipoDeDados |
SendToConnectionAction |
ConnectionId, Dados, TipoDeDados |
AddUserToGroupAction |
UserId, Grupo |
RemoveUserFromGroupAction |
ID de Usuário, Grupo |
RemoveUserFromAllGroupsAction |
Id do usuário |
AddConnectionToGroupAction |
ConnectionId, Grupo |
RemoveConnectionFromGroupAction |
ConnectionId, Grupo |
CloseAllConnectionsAction |
Excluído, Razão |
CloseClientConnectionAction |
ConnectionId, Razão |
CloseGroupConnectionsAction |
Grupo, Excluído, Razão |
GrantPermissionAction |
IdConexão, Permissão, NomeDestino |
RevokePermissionAction |
ConnectionId, Permissão, NomeDoAlvo |
Configuração
WebPubSub
A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json e no WebPubSub atributo.
| propriedade function.json | Propriedade de Atributo | Descrição |
|---|---|---|
| tipo | n/d | Deve ser definido como webPubSub |
| direção | n/d | Deve ser definido como out |
| Nome | n/d | Nome da variável usado no código da função para o objeto de vinculação de saída. |
| hub | Núcleo | O valor deve ser definido como o nome do hub Web PubSub para que a função seja acionada. Suportamos definir o valor no atributo como prioridade mais alta, ou ele pode ser definido nas configurações do aplicativo como um valor global. |
| conexão | Conexão | O nome da configuração do aplicativo que contém a cadeia de conexão do Serviço Web PubSub (o padrão é "WebPubSubConnectionString"). |
Resolução de Problemas
Configurando o registro em log do console
Você também pode ativar facilmente o registo de consola se quiser aprofundar-se nas solicitações que está a fazer no serviço.
Próximos passos
Use estes recursos para começar a criar seu próprio aplicativo: