Azure Functions에 대한 SignalR Service 트리거 바인딩
SignalR 트리거 바인딩을 사용하여 Azure SignalR Service에서 보낸 메시지에 응답합니다. 함수가 트리거되면 함수에 전달된 메시지는 json 개체로 구문 분석됩니다.
SignalR Service 서버리스 모드에서 SignalR Service는 업스트림 기능을 사용하여 클라이언트에서 함수 앱으로 메시지를 보냅니다. 그리고 함수 앱은 SignalR Service 트리거 바인딩을 사용하여 이러한 메시지를 처리합니다. 일반 아키텍처는 다음과 같이 표시됩니다.
설정 및 구성 세부 정보에 대한 자세한 내용은 개요를 참조하세요.
예시
C# 함수는 다음 C# 모드 중 하나를 사용하여 만들 수 있습니다.
- 격리된 작업자 모델: 런타임에서 격리된 작업자 프로세스에서 실행되는 컴파일된 C# 함수입니다. LTS 및 비 LTS 버전 .NET 및 .NET Framework에서 실행되는 C# 함수를 지원하려면 격리된 작업자 프로세스가 필요합니다.
- In Process 모델: Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.
- C# 스크립트: Azure Portal에서 C# 함수를 만들 때 주로 사용됩니다.
Important
In Process 모델에 대한 지원은 2026년 11월 10일에 종료됩니다. 전체 지원을 위해 앱을 격리된 작업자 모델로 마이그레이션하는 것이 좋습니다.
다음 샘플에서는 클라이언트에서 메시지 이벤트를 수신하고 메시지 콘텐츠를 기록하는 C# 함수를 보여 줍니다.
[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);
}
Important
C# 격리 작업자의 SignalR Service 바인딩 클래스 기반 모델은 C# 작업자 모델의 제한으로 인해 SignalR 트리거를 작성하는 방법을 최적화하지 않습니다. 클래스 기반 모델에 대한 자세한 내용은 클래스 기반 모델을 참조하세요.
SignalR 트리거는 현재 Java에서 지원되지 않습니다.
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}.`)
}
})
완전한 PowerShell 예제가 보류 중입니다.
다음은 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']))
특성
In Process 및 격리된 작업자 프로세스 C# 라이브러리는 모두 SignalRTrigger
특성을 사용하여 함수를 정의합니다. C# 스크립트는 대신 function.json 구성 파일을 사용합니다.
다음 표에서는 SignalRTrigger
특성의 속성을 설명합니다.
특성 속성 | 설명 |
---|---|
HubName | 이 값은 트리거할 함수에 대한 SignalR 허브의 이름으로 설정해야 합니다. |
범주 | 이 값은 트리거할 함수에 대한 메시지 범주로 설정해야 합니다. 범주는 다음 값 중 하나일 수 있습니다.
|
이벤트 | 이 값은 트리거할 함수를 위해 반드시 메시지의 이벤트로 설정해야 합니다. 메시지 범주의 경우 이벤트는 클라이언트가 보내는 호출 메시지의 대상입니다. 연결 범주의 경우 연결 및 연결 끊김만 사용됩니다. |
ParameterNames | (선택 사항)매개 변수에 바인딩되는 이름 목록입니다. |
ConnectionStringSetting | SignalR Service 연결 문자열이 포함된 앱 설정의 이름(기본값은 AzureSignalRConnectionString )입니다. |
주석
현재 SignalR 트리거에 대해 지원되는 Java 주석이 없습니다.
구성
다음 표에서는 function.json 파일에 설정된 바인딩 구성 속성을 설명합니다.
function.json 속성 | 설명 |
---|---|
type | SignalRTrigger 로 설정해야 합니다. |
direction | in 로 설정해야 합니다. |
이름 | 트리거 호출 컨텍스트 개체에 대한 함수 코드에 사용되는 변수 이름입니다. |
hubName | 이 값은 트리거할 함수에 대한 SignalR 허브의 이름으로 설정해야 합니다. |
category | 이 값은 트리거할 함수에 대한 메시지 범주로 설정해야 합니다. 범주는 다음 값 중 하나일 수 있습니다.
|
event | 이 값은 트리거할 함수를 위해 반드시 메시지의 이벤트로 설정해야 합니다. 메시지 범주의 경우 이벤트는 클라이언트가 보내는 호출 메시지의 대상입니다. 연결 범주의 경우 연결 및 연결 끊김만 사용됩니다. |
parameterNames | (선택 사항)매개 변수에 바인딩되는 이름 목록입니다. |
connectionStringSetting | SignalR Service 연결 문자열이 포함된 앱 설정의 이름(기본값은 AzureSignalRConnectionString )입니다. |
전체 예제는 예제 섹션을 참조하세요.
사용
페이로드
트리거 입력 형식은 사용자 지정 형식으로 InvocationContext
선언됩니다. 선택하는 InvocationContext
경우 요청 콘텐츠에 대한 모든 권한을 얻습니다. 사용자 지정 형식의 경우 런타임은 JSON 요청 본문을 구문 분석하여 개체 속성을 설정하려고 합니다.
InvocationContext
InvocationContext
에는 다음 속성을 포함하는 SignalR 서비스에서 보낸 메시지의 모든 콘텐츠가 포함됩니다.
속성 | 설명 |
---|---|
인수 | 메시지 범주에 사용할 수 있습니다. 호출 메시지의 인수를 포함합니다. |
Error | 연결이 끊긴 이벤트에 사용할 수 있습니다. 연결이 오류 없이 닫혀 있거나 오류 메시지가 포함된 경우 비어 있을 수 있습니다. |
허브 | 메시지가 속한 허브 이름입니다. |
범주 | 메시지의 범주입니다. |
이벤트 | 메시지의 이벤트입니다. |
ConnectionId | 메시지를 보내는 클라이언트의 연결 ID입니다. |
사용자 ID | 메시지를 보내는 클라이언트의 사용자 ID입니다. |
헤더 | 요청의 헤더입니다. |
쿼리 | 클라이언트가 서비스에 연결하는 경우 요청에 대한 쿼리입니다. |
클레임 | 클라이언트의 클레임입니다. |
ParameterNames
사용
SignalRTrigger
의 ParameterNames
속성을 사용하면 호출 메시지의 인수를 함수의 매개 변수에 바인딩할 수 있습니다. 정의한 이름은 다른 바인딩에서 바인딩 식의 일부로 사용하거나 코드에서 매개 변수로 사용할 수 있습니다. 이렇게 하면 .의 인수에 보다 편리하게 액세스할 수 있습니다 InvocationContext
.
두 개의 인수message1
를 사용하여 Azure Function에서 메서드 broadcast
를 호출하려고 하는 JavaScript SignalR 클라이언트가 message2
있다고 가정해 보겠습니다.
await connection.invoke("broadcast", message1, message2);
parameterNames
를 설정한 후 정의한 이름은 클라이언트 쪽에서 보낸 인수와 일치합니다.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
그런 다음 , arg1
의 message1
arg2
콘텐츠를 포함하고 의 콘텐츠를 message2
포함합니다.
ParameterNames
고려 사항
매개 변수 바인딩의 경우 순서가 중요합니다. ParameterNames
를 사용하는 경우 ParameterNames
의 순서는 클라이언트에서 호출하는 인수 순서와 일치합니다. C#에서 [SignalRParameter]
특성을 사용하는 경우 Azure 함수 메서드의 인수 순서는 클라이언트의 인수 순서와 일치합니다.
ParameterNames
[SignalRParameter]
특성을 동시에 사용할 수 없거나 예외가 발생합니다.
SignalR Service 통합
SignalR Service 트리거 바인딩을 사용하는 경우 Function App에 액세스하려면 SignalR Service에 URL이 필요합니다. URL은 SignalR Service 쪽의 업스트림 설정 에서 구성해야 합니다.
SignalR Service 트리거를 사용하는 경우 URL은 다음과 같이 간단하고 형식이 지정될 수 있습니다.
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
함수 Function_App_URL
앱의 개요 페이지에서 찾을 수 있으며 API_KEY
Azure Function에서 생성됩니다. 함수 앱의 API_KEY
앱 키 블레이드에서 signalr_extension
가져올 수 있습니다.
둘 이상의 함수 앱을 하나의 SignalR Service와 함께 사용하려는 경우 업스트림은 복잡한 라우팅 규칙을 지원할 수도 있습니다. 업스트림 설정에서 자세한 내용을 확인하세요.
단계별 샘플
GitHub의 양방향 채팅방 샘플을 따라 SignalR Service 트리거 바인딩 및 업스트림 기능을 사용하여 함수 앱에 채팅방을 배포할 수 있습니다.