Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 vêm 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 ações do serviço | Vinculação de saída |
Código-fonte Documentação de referência |
Adicionar à sua aplicação de 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 classes .NET, enquanto um pacote de extensão é usado para todos os outros tipos de aplicativos.
| Linguagem | Adicionar por... |
|---|---|
| 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 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 ConnectEventResponseEventErrorResponse, 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 | Descrição |
|---|---|---|
| tipo | 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 | 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 ou usersystem. |
| 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 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 | Descrição | Propriedades |
|---|---|---|---|
| pedido | WebPubSubEventRequest |
Descreve a solicitação upstream | A propriedade difere por diferentes tipos de eventos, incluindo classes ConnectEventRequestderivadas , ConnectedEventRequestUserEventRequest eDisconnectedEventRequest |
| 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 |
Request message dataType, 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ão digital de certificado de clientes na solicitação do sistema connect |
- |
| razão | 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 request aquele diferente do tipo padrão data para tornar a função vinculante corretamente. BinaryData
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 | Descrição | 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.
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 essa ligação de entrada pode ser usado para que os clientes recuperem as informações de conexão.WebPubSubContextQuando o uso é Static Web Apps,
HttpTriggeré o único gatilho suportado e no cenário Web PubSub, fornecemos aWebPubSubContextligaçã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 comWebPubSubTriggero fácil manuseio em funções. Veja exemplos abaixo. Quando usado comHttpTriggero , 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
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 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 | Descrição |
|---|---|---|
| tipo | 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 | 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
WebPubSubConexão
WebPubSubConnection fornece as propriedades abaixo.
| Nome da vinculação | Tipo de Enlace | Descrição |
|---|---|---|
| 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 | cadeia (de caracteres) | 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 | 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 Descreva a solicitação, por exemplo, Reason para DisconnectedEventRequest. |
| resposta | HttpResponseMessage |
A extensão cria resposta principalmente para AbuseProtection casos e 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. | - |
| 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 | Descrição | 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 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 usuários tiverem necessidade de definir a resposta do evento, você deverá retornar um contém HttpResponseMessage ou mensagens para o evento do usuário como ConnectEventResponse de resposta e colocar o 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 |
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 |
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 | Descrição |
|---|---|---|
| tipo | 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 | 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 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: