Azure İşlevleri için tetikleyici bağlamasını SignalR Hizmeti

Azure SignalR Hizmeti gönderilen iletilere yanıt vermek için SignalR tetikleyici bağlamasını kullanın. İşlev tetiklendiğinde, işleve geçirilen iletiler json nesnesi olarak ayrıştırılır.

SignalR Hizmeti sunucusuz modda SignalR Hizmeti, istemciden İşlev Uygulamasına ileti göndermek için Yukarı Akış özelliğini kullanır. İşlev Uygulaması bu iletileri işlemek için SignalR Hizmeti tetikleyici bağlamasını kullanır. Genel mimari aşağıda gösterilmiştir:

SignalR Tetikleyici Mimarisi

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.

Örnek

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir.
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi.
  • C# betiği: Öncelikle Azure portalında C# işlevleri oluşturduğunuzda kullanılır.

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.

Aşağıdaki örnekte, istemcilerden bir ileti olayı alan ve ileti içeriğini günlüğe kaydeden bir C# işlevi gösterilmektedir.

[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);
}

Önemli

C# yalıtılmış çalışanındaki SignalR Hizmeti bağlamalarının sınıf tabanlı modeli, C# çalışan modelinin sınırlaması nedeniyle SignalR tetikleyicilerini yazma şeklinizi iyileştirmez. Sınıf tabanlı model hakkında daha fazla bilgi için bkz . Sınıf tabanlı model.

SignalR tetikleyicisi şu anda Java için desteklenmiyor.

function.json dosyasındaki bağlama verileri aşağıdadır:

{
    "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}.`)
        }
    })

Tam PowerShell örnekleri beklemede.

Python kodu şu şekildedir:

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']))

Özellikler

hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları işlevi tanımlamak için özniteliğini kullanırSignalRTrigger. C# betiği bunun yerine bir function.json yapılandırma dosyası kullanır.

Aşağıdaki tabloda özniteliğin SignalRTrigger özellikleri açıklanmaktadır.

Öznitelik özelliği Açıklama
HubName bu değer, işlevin tetiklenebilmesi için SignalR hub'ının adına ayarlanmalıdır.
Kategori Bu değer, işlevin tetiklenebilmesi için ileti kategorisi olarak ayarlanmalıdır. Kategori aşağıdaki değerlerden biri olabilir:
  • bağlantılar: Bağlı ve bağlantısı kesilmiş olayları dahil
  • iletiler: Bağlantılar kategorisindekiler dışında diğer tüm olayları dahil eder
Olay Bu değer, işlevin tetiklenebilmesi için iletilerin olayı olarak ayarlanmalıdır. İletiler kategorisi için olay, istemcilerin gönderdiği hedefçağrı iletisidir. Bağlantılar kategorisi için yalnızca bağlı ve bağlantısı kesilmiş kullanılır.
ParameterNames (İsteğe bağlı) Parametrelere bağlanan adların listesi.
Bağlan ionStringSetting varsayılan AzureSignalRConnectionStringolarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı.

Ek Açıklamalar

Şu anda SignalR tetikleyicisi için desteklenen bir Java ek açıklaması yoktur.

Yapılandırma

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
type olarak ayarlanmalıdır SignalRTrigger.
direction olarak ayarlanmalıdır in.
Adı Tetikleyici çağırma bağlam nesnesi için işlev kodunda kullanılan değişken adı.
hubName bu değer, işlevin tetiklenebilmesi için SignalR hub'ının adına ayarlanmalıdır.
category Bu değer, işlevin tetiklenebilmesi için ileti kategorisi olarak ayarlanmalıdır. Kategori aşağıdaki değerlerden biri olabilir:
  • bağlantılar: Bağlı ve bağlantısı kesilmiş olayları dahil
  • iletiler: Bağlantılar kategorisindekiler dışında diğer tüm olayları dahil eder
event Bu değer, işlevin tetiklenebilmesi için iletilerin olayı olarak ayarlanmalıdır. İletiler kategorisi için olay, istemcilerin gönderdiği hedefçağrı iletisidir. Bağlantılar kategorisi için yalnızca bağlı ve bağlantısı kesilmiş kullanılır.
parameterNames (İsteğe bağlı) Parametrelere bağlanan adların listesi.
connectionStringSetting varsayılan AzureSignalRConnectionStringolarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı.

Tam örnekler için Örnek bölümüne bakın.

Kullanım

Yük

Tetikleyici giriş türü ya da InvocationContext özel bir tür olarak bildirilir. öğesini seçerseniz InvocationContext, istek içeriğine tam erişim elde edersiniz. Özel bir tür için çalışma zamanı JSON istek gövdesini ayrıştırarak nesne özelliklerini ayarlamaya çalışır.

InvocationContext

InvocationContext , aşağıdaki özellikleri içeren bir SignalR hizmetinden gönderilen iletideki tüm içeriği içerir:

Özellik Açıklama
Bağımsız değişkenler İletiler kategorisi için kullanılabilir. Çağırma iletisindeki bağımsız değişkenleri içerir
Hata Bağlantısı kesilmiş olay için kullanılabilir. Bağlantı hiçbir hata olmadan kapatıldıysa veya hata iletilerini içeriyorsa Boş olabilir.
Hub İletinin ait olduğu hub adı.
Kategori İletinin kategorisi.
Olay İletinin olayı.
ConnectionId İletiyi gönderen istemcinin bağlantı kimliği.
Kullanıcı Kimliği İletiyi gönderen istemcinin kullanıcı kimliği.
Üst Bilgiler İsteğin üst bilgileri.
Sorgu İstemciler hizmete bağlandığında isteğin sorgusu.
Talepler İstemcinin talepleri.

ParameterNames kullanma

özelliği ParameterNamesSignalRTrigger , çağrı iletilerinin bağımsız değişkenlerini işlevlerin parametrelerine bağlamanıza olanak tanır. Bağlama ifadelerinin bir parçası olarak tanımladığınız adı diğer bağlamada veya kodunuzda parametre olarak kullanabilirsiniz. Bu, bağımsız değişkenlerine InvocationContexterişmek için daha kullanışlı bir yol sağlar.

Azure İşlevi'nde iki bağımsız değişkenle message1yöntemini broadcast çağırmaya çalışan bir JavaScript SignalR istemciniz olduğunu varsayalım: . message2

await connection.invoke("broadcast", message1, message2);

ayarladıktan parameterNamessonra, tanımladığınız adlar istemci tarafında gönderilen bağımsız değişkenlere karşılık gelir.

[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]

Ardından, arg1 öğesinin içeriğini message1ve arg2 içeriğini message2içerir.

ParameterNames Husus -lar

Parametre bağlaması için sıra önemlidir. kullanıyorsanız ParameterNamesiçindeki sıra ParameterNames , istemcide çağırdığınız bağımsız değişkenlerin sırasıyla eşleşir. C# dilinde öznitelik [SignalRParameter] kullanıyorsanız, Azure İşlevi yöntemlerindeki bağımsız değişkenlerin sırası istemcilerdeki bağımsız değişkenlerin sırasıyla eşleşir.

ParameterNamesve özniteliği [SignalRParameter] aynı anda kullanılamaz, aksi durumda bir özel durum alırsınız.

SignalR Hizmeti tümleştirmesi

SignalR Hizmeti SignalR Hizmeti tetikleyici bağlaması kullanırken İşlev Uygulamasına erişmek için bir URL gerekir. URL, SignalR Hizmeti tarafındaki Yukarı Akış Ayarlar yapılandırılmalıdır.

Yukarı Akış Portalı

SignalR Hizmeti tetikleyicisi kullanılırken URL basit ve aşağıdaki gibi biçimlendirilmiş olabilir:

<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>

, Function_App_URL İşlev Uygulamasının Genel Bakış sayfasında bulunabilir ve API_KEY Azure İşlevi tarafından oluşturulur. öğesini İşlev Uygulaması'nın Uygulama anahtarları dikey penceresinden alabilirsiniz.API_KEYsignalr_extension API key

Bir SignalR Hizmeti birden fazla İşlev Uygulamasını birlikte kullanmak istiyorsanız, yukarı akış karmaşık yönlendirme kurallarını da destekleyebilir. Yukarı akış ayarları bölümünde daha fazla ayrıntı bulabilirsiniz.

Adım adım örnek

İşlev Uygulamasında SignalR Hizmeti tetikleyici bağlama ve yukarı akış özelliğiyle sohbet odası dağıtmak için GitHub'daki örneği izleyebilirsiniz: Çift yönlü sohbet odası örneği

Sonraki adımlar