Enlace del desencadenador de SignalR Service para Azure Functions
Use el enlace del desencadenador de SignalR para responder a mensajes enviados desde Azure SignalR Service. Cuando se desencadena la función, los mensajes pasados a la función se analizan como un objeto JSON.
En el modo sin servidor de SignalR Service, SignalR Service usa la característica Upstream para enviar mensajes del cliente a la aplicación de funciones. Y la aplicación de funciones usa el enlace de desencadenador de SignalR Service para controlar estos mensajes. A continuación se muestra la arquitectura general:
Para obtener información sobre los detalles de instalación y configuración, vea la información general.
Ejemplo
Se puede crear una función C# mediante uno de los siguientes modos de C#:
- Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
- Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions.
- Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.
Importante
El soporte técnico del modelo en proceso finalizará el 10 de noviembre de 2026. Se recomienda encarecidamente migrar las aplicaciones al modelo de trabajo aislado para obtener soporte técnico completo.
En el ejemplo siguiente se muestra una función de C# que recibe un evento de mensaje de los clientes y registra el contenido del mensaje.
[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
El modelo basado en clases de enlaces de SignalR Service en el trabajo aislado de C# no optimiza la forma de escribir desencadenadores de SignalR debido a la limitación del modelo de trabajo de C#. Para obtener más información sobre el modelo basado en clases, vea Modelo basado en clases.
Actualmente Java no admite el desencadenador de SignalR.
Estos son los datos de enlace del archivo 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}.`)
}
})
Los ejemplos completos de PowerShell están pendientes.
Este es el código de 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
Tanto las bibliotecas de C# en proceso como las de proceso de trabajo aislado usan el atributo SignalRTrigger
para definir la función. El script de C#, en su lugar, usa un archivo de configuración function.json.
En la siguiente tabla se detallan las propiedades del atributo SignalRTrigger
.
Propiedad de atributo | Descripción |
---|---|
HubName | Este valor debe establecerse en el nombre del centro de SignalR para la función que se va a desencadenar. |
Categoría | Este valor debe establecerse como la categoría de mensajes para la función que se va a desencadenar. La categoría puede ser uno de los siguientes valores:
|
Evento | Este valor debe establecerse como el evento de mensajes para la función que se va a desencadenar. En la categoría mensajes, el evento es el objetivo en el mensaje de invocación que envían los clientes. En la categoría conexiones, solo se usan conectados y desconectados. |
parameterNames | (Opcional) Lista de nombres que se enlaza a los parámetros. |
ConnectionStringSetting | El nombre de la configuración de la aplicación que contiene la cadena de conexión de SignalR Service, que por defecto es AzureSignalRConnectionString . |
anotaciones
Actualmente no hay ninguna anotación de Java compatible con un desencadenador de SignalR.
Configuración
En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.
Propiedad de function.json | Descripción |
---|---|
type | Se debe establecer en SignalRTrigger . |
direction | Se debe establecer en in . |
name | Nombre de variable utilizado en el código de función para el objeto de contexto de invocación del desencadenador. |
hubName | Este valor debe establecerse en el nombre del centro de SignalR para la función que se va a desencadenar. |
category | Este valor debe establecerse como la categoría de mensajes para la función que se va a desencadenar. La categoría puede ser uno de los siguientes valores:
|
event | Este valor debe establecerse como el evento de mensajes para la función que se va a desencadenar. En la categoría mensajes, el evento es el objetivo en el mensaje de invocación que envían los clientes. En la categoría conexiones, solo se usan conectados y desconectados. |
parameterNames | (Opcional) Lista de nombres que se enlaza a los parámetros. |
connectionStringSetting | El nombre de la configuración de la aplicación que contiene la cadena de conexión de SignalR Service, que por defecto es AzureSignalRConnectionString . |
Consulte la sección de ejemplos para ver ejemplos completos.
Uso
Payloads
El tipo de entrada del desencadenador se declara como InvocationContext
o como un tipo personalizado. Si elige InvocationContext
, obtendrá acceso completo al contenido de la solicitud. En un tipo personalizado, el runtime intenta analizar el cuerpo de la solicitud JSON para establecer las propiedades del objeto.
InvocationContext
InvocationContext
incluye todo el contenido del mensaje enviado desde un servicio SignalR, que incluye las siguientes propiedades:
Propiedad | Descripción |
---|---|
Argumentos | Disponible para la categoría mensajes. Contiene argumentos en el mensaje de invocación. |
Error | Disponible para evento desconectado. Puede estar vacío si la conexión se cerró sin errores o puede contener los mensajes de error. |
Hub | Nombre del centro al que pertenece el mensaje. |
Category | Categoría del mensaje. |
Evento | Evento del mensaje. |
ConnectionId | Identificador de conexión del cliente que envía el mensaje. |
UserId | Identidad de usuario del cliente que envía el mensaje. |
encabezados | los encabezados de la solicitud. |
Consultar | La consulta de la solicitud cuando los clientes se conectan al servicio. |
Notificaciones | Las notificaciones del cliente. |
Usar ParameterNames
La propiedad ParameterNames
de SignalRTrigger
permite enlazar argumentos de mensajes de invocación con los parámetros de funciones. Puede utilizar el nombre que ha definido como parte de expresiones de enlace en otro enlace o como parámetros en el código. Esto proporciona una manera más práctica de acceder a los argumentos de InvocationContext
.
Imagine que tiene un cliente de SignalR de JavaScript que intenta invocar el método broadcast
en Azure Functions con dos argumentos: message1
, message2
.
await connection.invoke("broadcast", message1, message2);
Después de establecer parameterNames
, los nombres definidos se corresponderán con los argumentos enviados en el lado cliente.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
A continuación, arg1
contiene el contenido de message1
y arg2
contiene el contenido de message2
.
Consideraciones de ParameterNames
Al enlazar parámetros, el orden es importante. Si está utilizando ParameterNames
, el orden de ParameterNames
coincide con el orden de los argumentos que se invocan en el cliente. Si está utilizando el atributo [SignalRParameter]
en C#, el orden de los argumentos en los métodos de Azure Functions coincide con el orden de los argumentos en los clientes.
ParameterNames
y el atributo [SignalRParameter]
no se pueden usar al mismo tiempo o obtendrá una excepción.
Integración de SignalR Service
SignalR Service necesita una dirección URL para acceder a la aplicación de funciones cuando se usa el enlace de desencadenador de SignalR Service. La dirección URL se debe configurar en Configuración ascendente en el lado de SignalR Service.
Al usar el desencadenador signalR Service, la dirección URL puede ser sencilla y formateada de la siguiente manera:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
Function_App_URL
Se puede encontrar en la página Información general de Function App y azure Function genera el API_KEY
. Puede obtener API_KEY
de signalr_extension
en la hoja Claves de la aplicación de la aplicación de funciones.
Si quiere usar más de una aplicación de funciones junto con una instancia de SignalR Service, Upstream también puede admitir reglas de enrutamiento complejas. Encuentre más información en Configuración ascendente.
Ejemplo paso a paso
Puede seguir el ejemplo de GitHub para implementar un salón de chat en una aplicación de funciones con la característica de enlace de desencadenador y Upstream de SignalR Service: Ejemplo de salón de chat bidireccional