Ligação de gatilho do Serviço SignalR para o Azure Functions
Use a associação de gatilho do SignalR para responder a mensagens enviadas do Serviço Azure SignalR. Quando a função é acionada, as mensagens passadas para a função são analisadas como um objeto json.
No modo sem servidor do Serviço SignalR, o Serviço SignalR usa o recurso Upstream para enviar mensagens do cliente para o Function App. E o Function App usa a ligação de gatilho do Serviço SignalR para lidar com essas mensagens. A arquitetura geral é mostrada abaixo:
Para obter informações sobre detalhes de instalação e configuração, consulte a visão geral.
Exemplo
Uma função C# pode ser criada usando um dos seguintes modos C#:
- Modelo de trabalho isolado: função C# compilada que é executada em um processo de trabalho isolado do tempo de execução. O processo de trabalho isolado é necessário para suportar funções C# em execução nas versões LTS e não-LTS .NET e .NET Framework.
- Modelo em processo: função C# compilada que é executada no mesmo processo que o tempo de execução do Functions.
- Script C#: usado principalmente quando você cria funções C# no portal do Azure.
Importante
O suporte para o modelo em processo terminará em 10 de novembro de 2026. É altamente recomendável que você migre seus aplicativos para o modelo de trabalho isolado para obter suporte total.
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
Modelo baseado em classe de ligações de serviço SignalR em C# trabalhador isolado não otimiza como você escreve gatilhos SignalR devido à limitação do modelo de trabalho C#. Para obter mais informações sobre o modelo baseado em classe, consulte Modelo baseado em classe.
O gatilho SignalR não é suportado atualmente para Java.
Aqui estão os dados de vinculaçã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# de processo de trabalho em processo e isoladas usam o SignalRTrigger
atributo 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 SignalRTrigger
atributo.
Propriedade Attribute | Description |
---|---|
Nome do Hub; | Esse valor deve ser definido como o nome do hub SignalR para que a função seja acionada. |
Categoria | Esse valor deve ser definido como a categoria de mensagens para a função a ser acionada. A categoria pode ser um dos seguintes valores:
|
Evento | Esse valor deve ser definido como o evento de mensagens para que a função seja acionada. Para a categoria de mensagens , evento é o destino na mensagem de invocação que os clientes enviam. Para a categoria conexões , apenas conectado e desconectado é usado. |
Nomes de parâmetros | (Opcional) Uma lista de nomes que se liga aos parâmetros. |
ConnectionStringSetting | O nome da configuração do aplicativo que contém a cadeia de conexão do Serviço SignalR, cujo padrão é AzureSignalRConnectionString . |
Anotações
Atualmente, não há uma anotação Java suportada para um gatilho SignalR.
Configuração
A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json .
function.json propriedade | Description |
---|---|
type | Deve ser definido como SignalRTrigger . |
direção | Deve ser definido como in . |
Designação | Nome da variável usada no código da função para o objeto de contexto de invocação de gatilho. |
Nome do hub | Esse valor deve ser definido como o nome do hub SignalR para que a função seja acionada. |
category | Esse valor deve ser definido como a categoria de mensagens para a função a ser acionada. A categoria pode ser um dos seguintes valores:
|
evento | Esse valor deve ser definido como o evento de mensagens para que a função seja acionada. Para a categoria de mensagens , evento é o destino na mensagem de invocação que os clientes enviam. Para a categoria conexões , apenas conectado e desconectado é usado. |
nomes_parâmetros; | (Opcional) Uma lista de nomes que se liga aos parâmetros. |
connectionStringSetting | O nome da configuração do aplicativo que contém a cadeia de conexão do Serviço SignalR, cujo padrão é AzureSignalRConnectionString . |
Consulte a seção Exemplo para obter exemplos completos.
Utilização
Cargas úteis
O tipo de entrada de gatilho é declarado como um ou InvocationContext
um tipo personalizado. Se você escolher InvocationContext
, você terá acesso total ao conteúdo da solicitação. Para um tipo personalizado, o tempo de execução tenta analisar o corpo da solicitação JSON para definir as propriedades do objeto.
InvocaçãoContexto
InvocationContext
contém todo o conteúdo da mensagem enviada de um serviço SignalR, que inclui as seguintes propriedades:
Property | Description |
---|---|
Argumentos | Disponível para a categoria de mensagens . Contém argumentos na mensagem de invocação |
Erro | Disponível para evento desconectado . Ele pode estar vazio se a conexão foi fechada sem erro ou se 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 | O ID de conexão do cliente que envia a mensagem. |
UserId | A identidade do usuário do cliente que envia a mensagem. |
Cabeçalhos | Os cabeçalhos da solicitação. |
Query | A consulta da solicitação quando os clientes se conectam ao serviço. |
Pedidos | As reivindicações do cliente. |
Ao utilizar ParameterNames
A propriedade ParameterNames
in SignalRTrigger
permite vincular argumentos de mensagens de invocação aos parâmetros de funções. Você pode usar o nome definido como parte de expressões de associação em outras associações ou como parâmetros em seu código. Isso lhe dá uma maneira mais conveniente de acessar argumentos de InvocationContext
.
Digamos que você tenha um cliente JavaScript SignalR tentando invocar o método broadcast
no Azure Function com dois argumentos message1
, message2
.
await connection.invoke("broadcast", message1, message2);
Depois de definir parameterNames
, os nomes definidos correspondem 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
.
ParameterNames
Considerações
Para a vinculação de parâmetros, a ordem é importante. Se você estiver usando ParameterNames
, a ordem em ParameterNames
corresponde à ordem dos argumentos que você invoca no cliente. Se você estiver usando o atributo [SignalRParameter]
em C#, a ordem dos argumentos nos métodos da Função do Azure corresponderá à ordem dos argumentos nos clientes.
ParameterNames
e atributo [SignalRParameter]
não pode ser usado ao mesmo tempo, ou você terá uma exceção.
Integração com o serviço SignalR
O Serviço SignalR precisa de uma URL para acessar o Aplicativo de Função quando você estiver usando a vinculação de gatilho do Serviço SignalR. O URL deve ser configurado em Configurações Upstream no lado do Serviço 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 Function App e o API_KEY
é gerado pelo Azure Function. Você pode obter o API_KEY
de na folha Teclas do signalr_extension
aplicativo do aplicativo de função.
Se você quiser usar mais de um aplicativo de função junto com um serviço SignalR, o upstream também pode oferecer suporte a regras de roteamento complexas. Encontre mais detalhes em Configurações Upstream.
Amostra passo a passo
Você pode seguir o exemplo no GitHub para implantar uma sala de chat no Function App com vinculação de gatilho do Serviço SignalR e recurso upstream: Exemplo de sala de chat bidirecional