Partilhar via


Gatilho e associações do Azure Web PubSub para o 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 Type
Executar uma função quando as mensagens vêm do serviço Vinculação de gatilho
Vincular solicitação ao objeto de destino em Http trigger para negociação e solicitações upstream Vinculação de entrada
Invocar ações do serviço Vinculação de saída

Código-fonte Documentação de referência | da API do pacote | Documentação | do produto Exemplos |

Adicionar à sua aplicação Funções

Trabalhar com o gatilho e as ligações requer que você faça referência ao pacote apropriado. O pacote NuGet é usado para bibliotecas de classe .NET, enquanto o pacote de extensão é usado para todos os outros tipos de aplicativos.

Idioma Adicionar por... Observações
C# Instalando o pacote NuGet, pré-lançamento da versão
Script C#, JavaScript, Python, PowerShell Instalar extensões explicitamente, Usar pacotes de extensões A extensão Ferramentas do Azure é recomendada para uso com o Visual Studio Code.
Script C# (somente online no portal do Azure) Adicionar uma ligação Para atualizar as extensões de associação existentes sem ter que publicar novamente seu aplicativo de função, consulte Atualizar suas extensões.

Conceitos-chave

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

(1)-(2) WebPubSubConnection ligação de entrada com HttpTrigger para gerar conexã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 vinculação de saída para solicitar serviço fazer algo.

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 code=<API_KEY> de consulta é NECESSÁRIA quando você estiver usando o Aplicativo de Função do Azure por motivos de segurança . A chave pode ser encontrada no portal do Azure. Encontre seu recurso de aplicativo de função e navegue até Funções ->Chaves de aplicativo ->Chaves do sistema ->webpubsub_extension depois de implantar o aplicativo 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>

Screenshot de obter teclas do sistema de função.

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 e ConnectEventResponse EventErrorResponse, e o evento do usuário respeita UserEventResponse e EventErrorResponse, os tipos rest 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 .

function.json propriedade Propriedade Attribute Description
type n/d Obrigatório - deve ser definido como webPubSubTrigger.
direção n/d Obrigatório - deve ser definido como in.
Designação 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 Hub 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.
eventType 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 ou user system.
nome_do_evento EventName 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 Connection Opcional - o nome de uma coleção de configurações ou configurações de aplicativo 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 é o parâmetro de vinculação reconhecido do tipo, os parâmetros rest 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 function.json acordo quando name é definido como data o objeto de ligação para entrada de gatilho. Todos os parâmetros podem ser lidos context.bindingData.<BindingName> e é JObject convertido.

Nome da vinculação Tipo de Enlace Description Propriedades
pedido WebPubSubEventRequest Descreve a solicitação upstream A propriedade difere por diferentes tipos de eventos, incluindo classes ConnectEventRequestderivadas , ConnectedEventRequestUserEventRequest eDisconnectedEventRequest
connectionContext 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 Request message dataType, que suporta binary, text, json -
afirmações IDictionary<string, string[]> Declarações do usuário na solicitação do sistema connect -
query 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ão digital de certificado de clientes na solicitação do sistema connect -
reason string Motivo na solicitação do sistema disconnected -

Importante

Em C#, vários tipos de parâmetro suportados DEVEM ser colocados no primeiro, ou seja, ou data aquele diferente do tipo padrão BinaryData para tornar a função vinculante corretamente. request

Resposta de retorno

WebPubSubTrigger respeita a resposta retornada do cliente para eventos síncronos de e evento do connect 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 Description Propriedades
ConnectEventResponse Resposta ao connect evento 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, ErrorMessage
*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 essa ligação de entrada pode ser usado para que os clientes recuperem as informações de conexão.

  • WebPubSubContext

    Quando o uso é Static Web Apps, HttpTrigger é o único gatilho suportado e no cenário Web PubSub, fornecemos a WebPubSubContext ligação de entrada ajuda os usuários a desserializar a solicitação http upstream do lado do serviço em protocolos Web PubSub. Assim, os clientes podem obter resultados semelhantes em comparação com WebPubSubTrigger o fácil manuseio em funções. Veja exemplos abaixo. Quando usado com HttpTriggero , o cliente precisa configurar a URL exposta HttpTrigger 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 de 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

Limitado aos tipos de parâmetros de vinculação não suportam uma maneira de passar lista nem matriz, o não é totalmente suportado com todos os parâmetros que o WebPubSubConnection SDK do servidor tem, especialmente roles, e também inclui 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 C# que adquire informações de solicitação upstream do Web PubSub usando a associação de entrada em connect tipo de evento 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

WebPubSubConexão

A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json e no WebPubSubConnection atributo.

function.json propriedade Propriedade Attribute Description
type n/d Deve ser definido como webPubSubConnection
direção n/d Deve ser definido como in
Designação 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 Hub 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 UserId Opcional - o valor da declaração de identificador de usuário a ser definido no token de chave de acesso.
conexão Connection 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.

function.json propriedade Propriedade Attribute Description
type n/d Deve ser definido como webPubSubContext.
direção n/d Deve ser definido como in.
Designação n/d Nome da variável usado no código de função para a solicitação Web PubSub de entrada.
conexão Connection Opcional - o nome de uma coleção de configurações ou configurações de aplicativo 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

WebPubSubConexão

WebPubSubConnection fornece as propriedades abaixo.

Nome da vinculação Tipo de Enlace Description
BaseUri URI Uri de conexão do cliente Web PubSub.
URI URI Uri absoluto da conexão Web PubSub, contém AccessToken a base gerada na solicitação.
AccessToken string Gerado AccessToken com base na solicitação UserId e informações de serviço.

WebPubSubContext

WebPubSubContext fornece as propriedades abaixo.

Nome da vinculação Tipo de Enlace Description 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 Descreva a solicitação, por exemplo, Reason para DisconnectedEventRequest.
resposta HttpResponseMessage A extensão cria resposta principalmente para AbuseProtection casos e erros. -
errorMessage string 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. -
isComprovação booleano Sinalizar para indicar se é uma solicitação de comprovação de AbuseProtection. -

Para WebPubSubEventRequesto , ele é desserializado para classes diferentes que fornecem informações diferentes sobre o cenário de solicitação. Para PreflightRequest casos válidos ou não, o usuário pode verificar as bandeiras IsPreflight e HasError 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 Description Propriedades
PreflightRequest Usado em AbuseProtection quando IsPreflight é verdadeiro -
ConnectEventRequest Usado no tipo de evento do sistema Connect Declarações, Consulta, Subprotocolos, ClientCertificates
ConnectedEventRequest Usado no tipo de evento do sistema Connected -
UserEventRequest Usado no tipo de evento do usuário Dados, DataType
DisconnectedEventRequest Usado no tipo de evento do sistema Disconnected Razão

Nota

Embora o é uma ligação de entrada fornece uma maneira de desserialização de solicitação semelhante em HttpTrigger comparação com WebPubSubTriggero , há limitações, ou seja, o WebPubSubContext 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 usuários tiverem necessidade de definir a resposta do evento, você deverá retornar um contém ConnectEventResponse ou mensagens para o evento do usuário como corpo de resposta e colocar o HttpResponseMessage estado da conexão com a chave ce-connectionstate no cabeçalho da 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 gerenciar clientes e grupos, bem como conceder/revogar permissões direcionadas a connectionId específicos com 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 para WebPubSubAction 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, DataType, Excluído
SendToUserAction UserId, Dados, DataType
SendToConnectionAction ConnectionId, Dados, DataType
AddUserToGroupAction UserId, Grupo
RemoveUserFromGroupAction UserId, Grupo
RemoveUserFromAllGroupsAction UserId
AddConnectionToGroupAction ConnectionId, Grupo
RemoveConnectionFromGroupAction ConnectionId, Grupo
CloseAllConnectionsAction Excluído, Razão
CloseClientConnectionAction ConnectionId, Razão
CloseGroupConnectionsAction Grupo, Excluído, Razão
GrantPermissionAction ConnectionId, Permissão, TargetName
RevokePermissionAction ConnectionId, Permissão, TargetName

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.

function.json propriedade Propriedade Attribute Description
type n/d Deve ser definido como webPubSub
direção n/d Deve ser definido como out
Designação n/d Nome da variável usado no código da função para o objeto de vinculação de saída.
hub Hub 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 Connection 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 habilitar facilmente o registro do console se quiser se aprofundar nas solicitações que está fazendo contra o serviço.

Próximos passos

Use estes recursos para começar a criar seu próprio aplicativo: