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
(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>
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 ConnectEventRequest derivadas , ConnectedEventRequest UserEventRequest 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 aWebPubSubContext
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 comWebPubSubTrigger
o fácil manuseio em funções. Veja exemplos abaixo. Quando usado comHttpTrigger
o , 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.
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 WebPubSubEventRequest
o , 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 WebPubSubTrigger
o , 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: