Azure İşlevleri için SignalR Hizmeti giriş bağlaması
İstemcinin Azure SignalR Hizmeti bağlanabilmesi için önce hizmet uç noktası URL'sini ve geçerli bir erişim belirtecini alması gerekir. SignalRConnectionInfo giriş bağlaması, SignalR Hizmeti uç nokta URL'sini ve hizmete bağlanmak için kullanılan geçerli bir belirteci oluşturur. Belirteç zaman sınırlıdır ve belirli bir kullanıcının bağlantı kimliğini doğrulamak için kullanılabilir. Bu nedenle, belirteci önbelleğe almamalı veya istemciler arasında paylaşmamalısınız. İstemcilerin bağlantı bilgilerini alması için genellikle HTTP tetikleyicisi ile SignalRConnectionInfo kullanırsınız.
SignalR istemci SDK'sı ile uyumlu bir "negotiate" işlevi oluşturmak için bu bağlamayı kullanma hakkında daha fazla bilgi için bkz. Azure SignalR Hizmeti ile geliştirme ve yapılandırma Azure İşlevleri. 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, giriş bağlamasını kullanarak SignalR bağlantı bilgilerini alan ve HTTP üzerinden döndüren bir C# işlevi gösterilmektedir.
[Function(nameof(Negotiate))]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "serverless")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
Aşağıdaki örnekte, bir function.json dosyasında signalR bağlantı bilgileri giriş bağlaması ve bağlantı bilgilerini döndürmek için bağlamayı kullanan bir işlev gösterilmektedir.
function.json dosyasındaki örnekteki bağlama verileri aşağıda verilmişti:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
JavaScript kodu şu şekildedir:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
Tam PowerShell örnekleri beklemede.
Aşağıdaki örnekte, bir function.json dosyasında signalR bağlantı bilgileri giriş bağlaması ve bağlantı bilgilerini döndürmek için bağlamayı kullanan bir Python işlevi gösterilmektedir.
Python kodu şu şekildedir:
def main(req: func.HttpRequest, connectionInfoJson: str) -> func.HttpResponse:
return func.HttpResponse(
connectionInfoJson,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
Aşağıdaki örnekte, giriş bağlamasını kullanarak SignalR bağlantı bilgilerini alan ve HTTP üzerinden döndüren bir Java işlevi gösterilmektedir.
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Kullanım
Kimliği doğrulanmış belirteçler
Kimliği doğrulanmış bir istemci işlevi tetiklediğinde, oluşturulan belirteçe bir kullanıcı kimliği talebi ekleyebilirsiniz. App Service Kimlik Doğrulamasını kullanarak işlev uygulamasına kolayca kimlik doğrulaması ekleyebilirsiniz.
App Service kimlik doğrulaması, kimliği doğrulanmış kullanıcının istemci asıl kimliğini ve adını içeren ve adlı x-ms-client-principal-id
x-ms-client-principal-name
HTTP üst bilgilerini ayarlar.
Bağlama özelliğini bir bağlama ifadesi kullanarak üst bilgiden değere ayarlayabilirsinizUserId
: {headers.x-ms-client-principal-id}
veya {headers.x-ms-client-principal-name}
.
[Function("Negotiate")]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "hubName1", UserId = "{headers.x-ms-client-principal-id}")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST, HttpMethod.GET },
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(name = "connectionInfo", hubName = "hubName1", userId = "{headers.x-ms-signalr-userid}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"userId": "{headers.x-ms-client-principal-id}",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
JavaScript kodu şu şekildedir:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
userId: '{headers.x-ms-client-principal-id}',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
Tam PowerShell örnekleri beklemede.
Python kodu şu şekildedir:
def main(req: func.HttpRequest, connectionInfo: str) -> func.HttpResponse:
# connectionInfo contains an access key token with a name identifier
# claim set to the authenticated user
return func.HttpResponse(
connectionInfo,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1",
userId = "{headers.x-ms-client-principal-id}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Ö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ır. C# betiği bunun yerine bir function.json yapılandırma dosyası kullanır.
Aşağıdaki tabloda özniteliğinin SignalRConnectionInfoInput
özellikleri açıklanmaktadır:
Öznitelik özelliği | Açıklama |
---|---|
HubName | Gerekli. Hub adı. |
ConnectionStringSetting | varsayılan AzureSignalRConnectionString olarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı. |
UserId | isteğe bağlı. SignalR bağlantısının kullanıcı tanımlayıcısı. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
IdToken | isteğe bağlı. Talepleri kullanıcı taleplerine eklenecek JWT belirteci. ClaimTypeList ile birlikte kullanılmalıdır. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
ClaimTypeList | isteğe bağlı. IdToken içindeki talepleri filtreleyen talep türlerinin listesi. |
Ek Açıklamalar
Aşağıdaki tabloda ek açıklama için SignalRConnectionInfoInput
desteklenen ayarlar açıklanmaktadır.
Ayar | Tanım |
---|---|
ad | Bağlantı bilgileri nesnesi için işlev kodunda kullanılan değişken adı. |
hubName | Gerekli. Hub adı. |
connectionStringSetting | varsayılan AzureSignalRConnectionString olarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı. |
userId | isteğe bağlı. SignalR bağlantısının kullanıcı tanımlayıcısı. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
idToken | isteğe bağlı. Talepleri kullanıcı taleplerine eklenecek JWT belirteci. claimTypeList ile birlikte kullanılmalıdır. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
claimTypeList | isteğe bağlı. idToken içindeki talepleri filtreleyen talep türlerinin listesi. |
Ek Açıklamalar
Aşağıdaki tabloda ek açıklama için SignalRConnectionInfoInput
desteklenen ayarlar açıklanmaktadır.
Ayar | Tanım |
---|---|
ad | Bağlantı bilgileri nesnesi için işlev kodunda kullanılan değişken adı. |
hubName | Gerekli. Hub adı. |
connectionStringSetting | varsayılan AzureSignalRConnectionString olarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı. |
userId | isteğe bağlı. SignalR bağlantısının kullanıcı tanımlayıcısı. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
idToken | isteğe bağlı. Talepleri kullanıcı taleplerine eklenecek JWT belirteci. claimTypeList ile birlikte kullanılmalıdır. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
claimTypeList | isteğe bağlı. idToken içindeki talepleri filtreleyen talep türlerinin listesi. |
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 signalRConnectionInfo . |
direction | olarak ayarlanmalıdır in . |
hubName | Gerekli. Hub adı. |
connectionStringSetting | varsayılan AzureSignalRConnectionString olarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının adı. |
userId | isteğe bağlı. SignalR bağlantısının kullanıcı tanımlayıcısı. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
idToken | isteğe bağlı. Talepleri kullanıcı taleplerine eklenecek JWT belirteci. claimTypeList ile birlikte kullanılmalıdır. Değeri bir HTTP isteği üst bilgisine veya sorgusuna bağlamak için bağlama ifadesi kullanabilirsiniz. |
claimTypeList | isteğe bağlı. idToken içindeki talepleri filtreleyen talep türlerinin listesi. |
HTTP tetikleyicisi için bağlama ifadeleri
SignalR giriş bağlamasının bazı özniteliklerinin değerlerinin HTTP isteklerinden geldiği yaygın bir senaryodur. Bu nedenle, HTTP isteklerindeki değerleri bağlama ifadesi aracılığıyla SignalR giriş bağlama özniteliklerine bağlamayı gösteririz.
HTTP meta veri türü | Bağlama ifadesi biçimi | Açıklama | Örnek |
---|---|---|---|
HTTP isteği sorgusu | {query.QUERY_PARAMETER_NAME} |
Karşılık gelen sorgu parametresinin değerini bir özniteliğe bağlar | {query.userName} |
HTTP isteği üst bilgisi | {headers.HEADER_NAME} |
Üst bilginin değerini bir özniteliğe bağlar | {headers.token} |