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:
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:
|
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. |
ConnectionStringSetting | varsayılan AzureSignalRConnectionString olarak 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:
|
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 AzureSignalRConnectionString olarak 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. |
Etkinlik | İ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 ParameterNames
SignalRTrigger
, ç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 InvocationContext
erişmek için daha kullanışlı bir yol sağlar.
Azure İşlevi'nde iki bağımsız değişkenle message1
yöntemini broadcast
çağırmaya çalışan bir JavaScript SignalR istemciniz olduğunu varsayalım: . message2
await connection.invoke("broadcast", message1, message2);
ayarladıktan parameterNames
sonra, 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 message1
ve arg2
içeriğini message2
içerir.
ParameterNames
Husus -lar
Parametre bağlaması için sıra önemlidir. kullanıyorsanız ParameterNames
iç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.
ParameterNames
ve ö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ı'nda yapılandırılmalıdır.
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_KEY
signalr_extension
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