Partilhar via


Gatilho e ligações do Azure Web PubSub para as Azure Functions

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

Código-fontePacoteDocumentação de referência da APIDocumentação do produtoExemplos

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

Diagrama mostrando o fluxo de trabalho do serviço Azure Web PubSub trabalhando com Aplicativos de Função.

(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>

Captura de ecrã das teclas de função do sistema.

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.

  • WebPubSubConnection

    Para 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 WebPubSubConnection ligaçã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.

  • WebPubSubContext

    Ao utilizar o Static Web Apps, HttpTrigger é o único gatilho suportado e no cenário Web PubSub, fornecemos a ligação de entrada WebPubSubContext, 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 com WebPubSubTrigger e manusear facilmente em funções. Veja exemplos abaixo. Quando usado com HttpTrigger, 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.

propriedade function.json Propriedade de Atributo Descrição
tipo n/d Deve ser definido como webPubSubContext.
direção n/d Deve ser definido como in.
Nome n/d Nome da variável usado no código de função para a solicitação Web PubSub de entrada.
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 Proteção contra abuso e validação de assinatura. O valor é resolvido automaticamente com "WebPubSubConnectionString" por padrão. E null significa que a validação não é necessária e sempre bem-sucedida.

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: