Associação de gatilho do Serviço do SignalR para Azure Functions
Use a associação de gatilho do SignalR para responder às mensagens enviadas do Serviço do Azure SignalR. Quando a função é acionada, as mensagens transmitidas à função são analisadas como um objeto json.
No modo sem servidor do Serviço do SignalR, o Serviço do SignalR usa o recurso Upstream para enviar mensagens do cliente ao aplicativo de funções. Já o aplicativo de funções usa a associação de gatilho do Serviço do SignalR para lidar com essas mensagens. A arquitetura geral é exibida abaixo:
Para obter informações sobre a instalação e detalhes de configuração, confira a visão geral.
Exemplo
A função C# pode ser criada por meio de um dos seguintes modos C#:
- Modelo de trabalho isolado: função C# compilada executada em um processo de trabalho que está isolado do runtime. É necessário um processo de trabalho isolado para dar suporte às funções C# executadas nas versões LTS e não LTS do .NET e do .NET Framework.
- Modelo em processo: função C# compilada no mesmo processo que o runtime do Functions.
- Script C#: usado principalmente ao criar funções C# no portal do Azure.
Importante
O suporte terminará para o modelo em processo em 10 de novembro de 2026. É altamente recomendável migrar seus aplicativos para o modelo de trabalho isolado para obter suporte completo.
O exemplo a seguir mostra uma função C# que recebe um evento de mensagem de clientes e registra o conteúdo da mensagem.
[Function(nameof(OnClientMessage))]
public static void OnClientMessage(
[SignalRTrigger("Hub", "messages", "sendMessage", "content", ConnectionStringSetting = "SignalRConnection")]
SignalRInvocationContext invocationContext, string content, FunctionContext functionContext)
{
var logger = functionContext.GetLogger(nameof(OnClientMessage));
logger.LogInformation("Connection {connectionId} sent a message. Message content: {content}", invocationContext.ConnectionId, content);
}
Importante
O modelo baseado em classe de associações de serviço do SignalR no trabalho isolado do C# não otimiza a forma como você escreve gatilhos do SignalR devido à limitação do modelo de trabalho do C#. Para obter mais informações sobre o modelo baseado em classe, consulte Modelo baseado em classe.
Atualmente, não há suporte para o gatilho do SignalR para Java.
Aqui estão os dados de associação no arquivo function.json:
{
"type": "signalRTrigger",
"name": "invocation",
"hubName": "hubName1",
"category": "messages",
"event": "SendMessage",
"parameterNames": [
"message"
],
"direction": "in"
}
app.generic("function1",
{
trigger: { "type": "signalRTrigger", "name": "invocation", "direction": "in", "hubName": "hubName1", "event": "SendMessage", "category": "messages" },
handler: (triggerInput, context) => {
context.log(`Receive ${context.Arguments[0]} from ${triggerInput.ConnectionId}.`)
}
})
Exemplos completos do PowerShell estão pendentes.
Aqui está o código Python:
import logging
import json
import azure.functions as func
def main(invocation) -> None:
invocation_json = json.loads(invocation)
logging.info("Receive {0} from {1}".format(invocation_json['Arguments'][0], invocation_json['ConnectionId']))
Atributos
As bibliotecas C# em processo e de processo de trabalho isolado usam o atributo SignalRTrigger
para definir a função. Em vez disso, o script C# usa um arquivo de configuração function.json.
A tabela a seguir explica as propriedades do atributo SignalRTrigger
.
Propriedade de atributo | Descrição |
---|---|
HubName | Esse valor deve ser definido como o nome do hub do SignalR para que a função seja acionada. |
Categoria | Esse valor deve ser definido como a categoria de mensagens para que a função seja acionada. A categoria pode ser um dos seguintes valores:
|
Evento | Esse valor deve ser definido como o evento das mensagens para que a função seja acionada. Na categoria messages, o evento é o destino da mensagem de invocação que os clientes enviam. Na categoria connections, somente são usados os valores conectado e desconectado. |
ParameterNames | (Opcional) Uma lista de nomes que se associa aos parâmetros. |
ConnectionStringSetting | O nome da configuração do aplicativo ou da coleção de configurações que contém a cadeia de conexão do Serviço do SignalR, cujo padrão é AzureSignalRConnectionString . |
Anotações
Atualmente, não há uma anotação Java compatível com um gatilho SignalR.
Configuração
A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json.
Propriedade function.json | Descrição |
---|---|
tipo | Deve ser definido como SignalRTrigger . |
direction | Deve ser definido como in . |
name | Nome da variável usada no código da função para o objeto de contexto da invocação do gatilho. |
hubName | Esse valor deve ser definido como o nome do hub do SignalR para que a função seja acionada. |
category | Esse valor deve ser definido como a categoria de mensagens para que a função seja acionada. A categoria pode ser um dos seguintes valores:
|
event | Esse valor deve ser definido como o evento das mensagens para que a função seja acionada. Na categoria messages, o evento é o destino da mensagem de invocação que os clientes enviam. Na categoria connections, somente são usados os valores conectado e desconectado. |
parameterNames | (Opcional) Uma lista de nomes que se associa aos parâmetros. |
connectionStringSetting | O nome da configuração do aplicativo ou da coleção de configurações que contém a cadeia de conexão do Serviço do SignalR, cujo padrão é AzureSignalRConnectionString . |
Consulte a Seção de exemplo para obter exemplos completos.
Uso
Conexões gerenciadas baseadas em identidade
Para obter a segurança ideal, seu aplicativo de funções deve usar identidades gerenciadas ao se conectar ao serviço Azure SignalR em vez de usar uma cadeia de conexão, que contém uma chave secreta compartilhada. Para obter mais informações, consulte Autorizar solicitações para recursos do Serviço do Azure SignalR com identidades gerenciadas do Microsoft Entra.
Payloads
O tipo de entrada do gatilho é declarado como InvocationContext
ou um tipo personalizado. Se você escolher InvocationContext
, terá acesso total ao conteúdo da solicitação. Para um tipo personalizado, o runtime tenta analisar o corpo da solicitação JSON para definir as propriedades do objeto.
InvocationContext
InvocationContext
contém o conteúdo na mensagem enviada de um serviço do SignalR, que inclui as seguintes propriedades:
Propriedade | Descrição |
---|---|
Argumentos | Disponível para a categoria messages. Contém argumentos na mensagem de invocação |
Erro | Disponível para o evento desconectado. Poderá ficar vazio se a conexão for fechada sem erros ou contiver as mensagens de erro. |
Hub | O nome do hub ao qual a mensagem pertence. |
Categoria | A categoria da mensagem. |
Evento | O evento da mensagem. |
ConnectionId | A ID de conexão do cliente que envia a mensagem. |
UserId | Identidade de usuário do cliente que envia a mensagem. |
Cabeçalhos | Os cabeçalhos da solicitação. |
Consulta | A consulta da solicitação quando os clientes se conectam ao serviço. |
Declarações | As declarações do cliente. |
Usando ParameterNames
A propriedade ParameterNames
em SignalRTrigger
permite que você associe argumentos das mensagens de invocação aos parâmetros das funções. É possível usar o nome que você definiu como parte das expressões de associação de outra associação ou como parâmetros no seu código. Isso oferece a você uma forma mais prática de acessar argumentos de InvocationContext
.
Digamos que você tenha um cliente SignalR do JavaScript que está tentando invocar o método broadcast
no Azure Functions com os dois argumentos message1
e message2
.
await connection.invoke("broadcast", message1, message2);
Depois de definir parameterNames
, o nome que você definiu corresponderá aos argumentos enviados no lado do cliente.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
Em seguida, o arg1
contém o conteúdo de message1
, e arg2
contém o conteúdo de message2
.
Considerações sobre ParameterNames
Na associação de parâmetros, a ordem é importante. Se você estiver usando ParameterNames
, a ordem de ParameterNames
corresponde à ordem dos argumentos que você invoca no cliente. Se você estiver usando o atributo [SignalRParameter]
de C#, a ordem dos argumentos nos métodos do Azure Functions corresponderá à ordem dos argumentos nos clientes.
ParameterNames
[SignalRParameter]
and não pode ser usado ao mesmo tempo, ou você receberá uma exceção.
Integração ao Serviço do SignalR
O Serviço do SignalR precisa de uma URL para acessar o aplicativo de funções quando você está usando a associação de gatilho do Serviço do SignalR. É necessário configurar a URL em Configurações de upstream no lado do Serviço do SignalR.
Ao usar o gatilho do Serviço SignalR, a URL pode ser simples e formatada da seguinte maneira:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
O Function_App_URL
pode ser encontrado na página Visão geral do Aplicativo de Funções e é API_KEY
gerado pelo Azure Function. Você pode obter a API_KEY
de signalr_extension
na folha API_KEY
do aplicativo de funções.
Se você quiser usar mais de um aplicativo de funções junto com um Serviço do SignalR, o upstream também poderá dar suporte a regras de roteamento complexas. Encontre mais detalhes em Configurações de upstream.
Exemplo passo a passo
Você pode seguir a amostra do GitHub para implantar uma sala de chat no aplicativo de funções com o recurso de upstream e associação de gatilho do Serviço do SignalR: Amostra de sala de chat bidirecional