Aracılığıyla paylaş


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 AzureSignalRConnectionStringolarak 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 AzureSignalRConnectionStringolarak 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 AzureSignalRConnectionStringolarak 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 AzureSignalRConnectionStringolarak 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}

Sonraki adımlar