ASP.NET Core SignalR yapılandırmada

JSON/MessagePack serileştirme seçenekleri

ASP.NET Core SignalR kodlama iletileri için iki protokolü destekler: JSON ve MessagePack. Her protokol serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme, Addjsonprotocol genişletme yöntemi kullanılarak sunucuda yapılandırılabilir. AddJsonProtocol, eklentisi eklendikten sonra SignalR eklenebilir Startup.ConfigureServices . Yöntemi, bir AddJsonProtocol nesneyi alan bir temsilciyi alır options . Bu nesnedeki Payloadserializeroptions özelliği, System.Text.Json JsonSerializerOptions bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir nesnedir. Daha fazla bilgi için bkz. System. Text. JSON belgeleri.

Örneğin, serileştiriciyi varsayılan ortası durum adları yerine özellik adlarının büyük küçük harflerini değiştirmemelidir şekilde yapılandırmak için aşağıdaki kodu kullanın Startup.ConfigureServices :

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

.NET istemcisinde, AddJsonProtocol Hubconnectionbuilder'da aynı genişletme yöntemi bulunur. Microsoft.Extensions.DependencyInjectionUzantı metodunu çözümlemek için ad alanı içeri aktarılmalıdır:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Not

JavaScript istemcisinde Şu anda JSON serileştirme yapılandırmak mümkün değildir.

Newtonsoft. JSON öğesine geç

Newtonsoft.Json' De desteklenmeyen özelliklerine ihtiyacınız varsa System.Text.Json , bkz. Newtonsoft.Json geçiş .

MessagePack serileştirme seçenekleri

MessagePack serileştirme, Addmessagepackprotocol çağrısına bir temsilci sağlanarak yapılandırılabilir. Daha ayrıntılı bilgi için ' de MessagePack ' SignalR i inceleyin.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirme yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda, hub 'ları yapılandırmaya yönelik seçenekler açıklanmaktadır SignalR :

Seçenek Varsayılan değer Description
ClientTimeoutInterval 30 saniye Sunucu, bu aralıkta (canlı tut dahil) bir ileti almamışsa istemcinin bağlantısının kesileceğini kabul eder. Bu, bu zaman aşımı aralığından daha uzun sürebilir çünkü bunun uygulanması nedeniyle istemcinin bağlantısı kesik olarak işaretlenir. Önerilen değer Double değeridir KeepAliveInterval .
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca önemli ağ gecikmesi nedeniyle el sıkışma zaman aşımı hataları gerçekleşirken değiştirilmesi gereken gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla bilgi için SignalR hub protokol belirtiminebakın.
KeepAliveInterval 15 saniye Sunucu bu Aralık dahilinde bir ileti göndermediyse bağlantının açık tutulması için bir ping iletisi otomatik olarak gönderilir. Değişiklik yaparken KeepAliveInterval , ServerTimeout serverTimeoutInMilliseconds istemci üzerindeki veya ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer iki Double değeridir KeepAliveInterval .
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı olan tüm protokollere izin verilir. Tek tek hub 'lara yönelik belirli protokolleri devre dışı bırakmak için bu listeden protokoller kaldırılabilir.
EnableDetailedErrors false İse true , bir hub yönteminde özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false Bu özel durum iletilerinin hassas bilgileri içerebildiği durumdur.
StreamBufferCapacity 10 İstemci yükleme akışları için ara belleğe oluşturulabilecek en fazla öğe sayısı. Bu sınıra ulaşıldığında, sunucu akış öğelerini işlemeden, etkinleştirmeleri işleme engellenir.
MaximumReceiveMessageSize 32 KB Tek bir gelen hub iletisinin en büyük boyutu.
MaximumParallelInvocationsPerClient 1 Kuyruğa almadan önce her bir istemcinin paralel olarak çağırabilmesi için en fazla hub yöntemi sayısı.

Seçenekler, içindeki çağrıya bir seçenek temsilcisi sağlayarak tüm Hub 'lar için yapılandırılabilir AddSignalR Startup.ConfigureServices .

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub için Seçenekler ' de belirtilen genel seçenekleri geçersiz kılar AddSignalR ve kullanılarak yapılandırılabilir AddHubOptions :

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

HttpConnectionDispatcherOptionsAktarımlar ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde Maphub <T> 'ya bir temsilci geçirilerek yapılandırılır Startup.Configure .

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

aşağıdaki tabloda ASP.NET Core SignalR gelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 64 KB İstemci tarafından, geri basıncı uygulamadan önce sunucunun arabelleğe aldığı en fazla bayt sayısı. Bu değeri artırmak, sunucunun geri basınç uygulamadan daha büyük iletileri daha hızlı almasına izin verir, ancak bellek tüketimini artırabilir.
TransportMaxBufferSize 64 KB Uygulama tarafından, geri basıncını gözlemlenmadan önce sunucunun arabelleklerinin gönderdiği en fazla bayt sayısı. Bu değeri artırmak, sunucunun geri basınç olmadan daha büyük iletileri daha hızlı arabelleğe almasına izin verir, ancak bellek tüketimini artırabilir.
AuthorizationData Veriler, Authorize hub sınıfına uygulanan özniteliklerden otomatik olarak toplanır. Bir istemcinin hub 'a bağlanmasına yetkili olup olmadığını belirlemede kullanılan ıauthorizedata nesnelerinin listesi.
Transports Tüm aktarımlar etkin. Bir HttpTransportType istemcinin bağlanmak için kullanabileceği taşımaları kısıtlayabilecek bir bit bayrakları değeri numaralandırması.
LongPolling Aşağıya bakın. Uzun yoklama taşımasına özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımasına özgü ek seçenekler.
MinimumProtocolVersion 0 Negotiate protokolünün en düşük sürümünü belirtin. Bu, istemcileri daha yeni sürümlerle sınırlandırmak için kullanılır.
CloseOnAuthenticationExpiration yanlış Belirtecin süresi dolduğunda bağlantıları kapatan kimlik doğrulama süre sonu izlemeyi etkinleştirmek için bu seçeneği ayarlayın.

Uzun yoklama taşıması, özelliği kullanılarak yapılandırılabilecek ek seçeneklere sahiptir LongPolling :

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Tek bir yoklama isteğini sonlandırmadan önce sunucunun istemciye göndermek için bekleyeceği en uzun süre. Bu değeri azaltmak istemcinin yeni yoklama istekleri daha sık vermesine neden olur.

WebSocket taşıması, özelliği kullanılarak yapılandırılabilecek ek seçeneklere sahiptir WebSockets :

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapandıktan sonra, istemci bu zaman aralığında kapanamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üstbilgiyi özel bir değere ayarlamak için kullanılabilen bir temsilci Sec-WebSocket-Protocol . Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değeri döndürmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri tür üzerinde yapılandırılabilir HubConnectionBuilder (.net ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de bulunur, ancak HttpHubConnectionBuilder alt sınıf, Oluşturucu yapılandırma seçeneklerinin yanı sıra kendisi de içerir HubConnection .

Günlüğe kaydetmeyi yapılandırma

Günlüğe kaydetme, .NET Istemcisinde yöntemi kullanılarak yapılandırılır ConfigureLogging . Günlüğe kaydetme sağlayıcıları ve filtreler, sunucuda oldukları gibi aynı şekilde kaydedilebilir. daha fazla bilgi için oturum açma ASP.NET Core belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Bir değer LogLevel yerine, bir günlük düzeyi adını string temsil eden bir değer de s hizmetlerisiniz. Sabitlere SignalR erişiminizin olmadığını ortamlarda günlüğe kaydetmeyi yapılandırarak bu LogLevel özellik yararlı olur.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

Aşağıdaki tabloda kullanılabilir günlük düzeyleri listelemektedir. Günlüğe kaydedecek configureLogging en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tablosunda bundan sonra listelenen düzeyler günlüğe kaydedilir.

Dize LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info veya information LogLevel.Information
warn veya warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklarınıza günlük kaydını yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm taşımalar varsayılan olarak etkindir.

Örneğin, Server-Sent Events taşımasını devre dışı bırakmak, ancak WebSockets ve Uzun Yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde taşımalar, için sağlanan seçenekler transport nesnesinde alanı ayarlanacak şekilde withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Java istemcisi websockets'in bu sürümünde, kullanılabilir tek aktarımdır.

Java istemcisinde taşıma, üzerinde withTransport yöntemiyle HttpHubConnectionBuilder seçilir. Java istemcisi varsayılan olarak WebSockets taşımayı kullanır.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Not

SignalRJava istemcisi henüz taşıma geri dönüş desteğine sahip değildir.

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için, istenen erişim belirteci döndüren bir işlev belirtmek üzere SignalR AccessTokenProvider seçeneğini ( accessTokenFactory JavaScript'te) kullanın. .NET İstemcisi'ne bu erişim belirteci HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirildi (Üst bilgi Authorization türüyle birlikte Bearer kullanılarak). JavaScript istemcisinde erişim belirteci, tarayıcı API'leri tarafından üst bilgi uygulama yeteneğinin (özellikle Server-Sent Events ve WebSockets isteklerinde) kısıtlayıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci sorgu dizesi değeri olarak access_token sağlanır.

.NET istemcisinde, AccessTokenProvider seçeneği içinde seçenekler temsilcisi kullanılarak belirtilebilir: WithUrl

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, içinde options accessTokenFactory nesnesinde alanı ayar tarafından withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

Java SignalR istemcisinde, HttpHubConnectionBuilder'abir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanmak üzere bir taşıyıcı belirteci yapılandırabilirsiniz. RxJava Single sağlamak için withAccessTokenFactory kullanın. <String> Single.defer çağrısıyla,istemciniz için erişim belirteçleri üretmek için mantık yazabilir.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımı ve canlı tutma seçeneklerini yapılandırma

Nesnenin kendi üzerinde zaman aşımı ve canlı tutma davranışını yapılandırmaya ek HubConnection seçenekler mevcuttur:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermemişse, istemci sunucunun bağlantısının kesilmiş olduğunu kabul eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu değer, bir ping iletisi sunucudan gönderilecek ve istemci tarafından zaman aşımı aralığı içinde alınacak kadar büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman vermek üzere sunucunun KeepAliveInterval değerinin en az iki katıdır.
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta el sıkışma yanıtı gönderemezse, istemci el sıkışmayı iptal eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye İstemcinin ping iletilerini hangi aralıkta gönderdiğini belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci, sunucu üzerinde kümede bir ileti ClientTimeoutInterval göndermemişse, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul ediyordur.

.NET İstemcisi'nin zaman aşımı değerleri değer olarak TimeSpan belirtilir.

Ek seçenekleri yapılandırma

Ek seçenekler, Java istemcisinde üzerinde veya üzerinde çeşitli yapılandırma API'leri üzerinde WithUrl withUrl (JavaScript'te) HubConnectionBuilder HttpHubConnectionBuilder yönteminde yalıtabilirsiniz:

.NET Seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde taşıyıcı kimlik doğrulama belirteci olarak belirtilen bir dize döndüren bir işlev.
SkipNegotiation false trueAnlaşma adımını atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkin olan tek taşıma olduğunda desteklenir. Bu ayar, Azure hizmeti kullanılırken etkinleştirilemez SignalR .
ClientCertificates Olmamalıdır Kimlik doğrulaması isteklerine gönderilmek üzere TLS sertifikaları koleksiyonu.
Cookies Olmamalıdır cookieHer HTTP isteğiyle gönderilmek üzere BIR http s koleksiyonu.
Credentials Olmamalıdır Her HTTP isteğiyle gönderilen kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini onaylaması için kapatıldıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmezse, istemci bağlantısını keser.
Headers Olmamalıdır Her HTTP isteğiyle birlikte gönderilmek üzere ek HTTP üstbilgileri haritası.
HttpMessageHandlerFactory null HTTP istekleri göndermek için kullanılan yapılandırmak veya değiştirmek için kullanılan bir temsilci HttpMessageHandler . WebSocket bağlantıları için kullanılmıyor. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri bir parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve döndürün ya da yeni bir HttpMessageHandler örnek döndürün. İşleyiciyi değiştirirken, belirtilen işleyiciden tutmak istediğiniz ayarları kopyalamadığınızdan emin olun, aksi takdirde, yapılandırılan seçenekler (örneğin, Cookie s ve üstbilgiler) yeni işleyiciye uygulanmaz.
Proxy null HTTP istekleri gönderilirken kullanılacak bir HTTP proxy 'si.
UseDefaultCredentials false Bu Boole değeri HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. bu, Windows kimlik doğrulamasının kullanımını mümkün bir şekilde sunar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılabilen bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek ClientWebSocketOptions örneğini alır.
ApplicationMaxBufferSize 1 MB Geri basınç uygulamadan önce istemcinin arabelleğe aldığı sunucudan alınan en fazla bayt sayısı. Bu değeri artırmak, istemcinin geri basınç uygulamadan daha büyük iletileri daha hızlı almasına izin verir, ancak bellek tüketimini artırabilir.
TransportMaxBufferSize 1 MB Kullanıcı uygulaması tarafından, istemcinin arabelleğe alarak, geri sıkışma gözlemledikten önce gönderdiği en fazla bayt sayısı. Bu değeri artırmak, istemcinin ters basınç beklemeden daha büyük iletileri daha hızlı arabelleğe almasına izin verir, ancak bellek tüketimini artırabilir.

.NET Istemcisinde bu seçenekler, aşağıdakileri yapmak için belirtilen seçenekler temsilcisinden değiştirilebilir WithUrl :

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript Istemcisinde, bu seçenekler şu şekilde sağlanmış bir JavaScript nesnesi içinde bulunabilir withUrl :

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

Java istemcisinde, bu seçenekler, içindeki döndürülen yöntemlerle yapılandırılabilir HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar

JSON/MessagePack serileştirme seçenekleri

ASP.NET Core SignalR kodlama iletileri için iki protokolü destekler: JSON ve MessagePack. Her protokol serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme, Addjsonprotocol genişletme yöntemi kullanılarak sunucuda yapılandırılabilir. AddJsonProtocol, eklentisi eklendikten sonra SignalR eklenebilir Startup.ConfigureServices . Yöntemi, bir AddJsonProtocol nesneyi alan bir temsilciyi alır options . Bu nesnedeki Payloadserializeroptions özelliği, System.Text.Json JsonSerializerOptions bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir nesnedir. Daha fazla bilgi için bkz. System. Text. JSON belgeleri.

Örneğin, serileştiriciyi varsayılan ortası durum adları yerine özellik adlarının büyük küçük harflerini değiştirmemelidir şekilde yapılandırmak için aşağıdaki kodu kullanın Startup.ConfigureServices :

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

.NET istemcisinde, AddJsonProtocol Hubconnectionbuilder'da aynı genişletme yöntemi bulunur. Microsoft.Extensions.DependencyInjectionUzantı metodunu çözümlemek için ad alanı içeri aktarılmalıdır:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Not

JavaScript istemcisinde Şu anda JSON serileştirme yapılandırmak mümkün değildir.

Newtonsoft. JSON öğesine geç

Newtonsoft.Json' De desteklenmeyen özelliklerine ihtiyacınız varsa System.Text.Json , bkz. Newtonsoft.Json geçiş .

MessagePack serileştirme seçenekleri

MessagePack serileştirme, Addmessagepackprotocol çağrısına bir temsilci sağlanarak yapılandırılabilir. Daha ayrıntılı bilgi için ' de MessagePack ' SignalR i inceleyin.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirme yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda, hub 'ları yapılandırmaya yönelik seçenekler açıklanmaktadır SignalR :

Seçenek Varsayılan değer Description
ClientTimeoutInterval 30 saniye Sunucu, bu aralıkta (canlı tut dahil) bir ileti almamışsa istemcinin bağlantısının kesileceğini kabul eder. Bu, bu zaman aşımı aralığından daha uzun sürebilir çünkü bunun uygulanması nedeniyle istemcinin bağlantısı kesik olarak işaretlenir. Önerilen değer Double değeridir KeepAliveInterval .
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca önemli ağ gecikmesi nedeniyle el sıkışma zaman aşımı hataları gerçekleşirken değiştirilmesi gereken gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla bilgi için SignalR hub protokol belirtiminebakın.
KeepAliveInterval 15 saniye Sunucu bu Aralık dahilinde bir ileti göndermediyse bağlantının açık tutulması için bir ping iletisi otomatik olarak gönderilir. Değişiklik yaparken KeepAliveInterval , ServerTimeout serverTimeoutInMilliseconds istemci üzerindeki veya ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer iki Double değeridir KeepAliveInterval .
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı tüm protokollere izin verilir. Tek tek hub'lar için belirli protokolleri devre dışı bırakmak için protokoller bu listeden kaldırılabilir.
EnableDetailedErrors false ise, true hub yönteminde bir özel durum atılan istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false bu özel durum iletilerinin hassas bilgiler içermesidir.
StreamBufferCapacity 10 İstemci karşıya yükleme akışları için arabelleğe adelenin maksimum öğe sayısı. Bu sınıra ulaşıldı ise, sunucu akış öğelerini işleyene kadar çağrıların işlemesi engellenir.
MaximumReceiveMessageSize 32 KB Tek bir gelen hub iletinin en büyük boyutu.
MaximumParallelInvocationsPerClient 1 Her istemcinin kuyruğa alamadan önce paralel olarak çağırabilirsiniz en fazla hub yöntemi sayısı.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hub'lar AddSignalR için yalıtabilirsiniz. Startup.ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub'ın seçenekleri içinde sağlanan genel seçenekleri geçersiz AddSignalR kılar ve kullanılarak yalıtabilirsiniz: AddHubOptions

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

Taşımalar HttpConnectionDispatcherOptions ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde MapHub'a <T> bir temsilci geçerek Startup.Configure yapılandırılır.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

Aşağıdaki tabloda, 'nin gelişmiş HTTP ASP.NET Core SignalR yapılandırma seçenekleri açık almaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 32 KB İstemciden alınan ve sunucunun geripressure uygulamadan önce arabelleğe aldığı maksimum bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geripressure uygulamadan daha hızlı bir şekilde aladurarak bellek tüketimini artırmasını sağlar.
AuthorizationData Hub sınıfına uygulanan Authorize özniteliklerden otomatik olarak toplanan veriler. Bir istemcinin hub'a bağlanma yetkisi olup olmadığını belirlemek için kullanılan IAuthorizeData nesnelerinin listesi.
TransportMaxBufferSize 32 KB Uygulama tarafından geri baskıyı gözlemmeden önce sunucunun arabelleğe alan en fazla bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geri baskıyı bekleymeden daha hızlı arabelleğe almasını sağlar, ancak bellek tüketimini de artırabilir.
Transports Tüm Taşımalar etkindir. Bir istemcinin bağlanmak için HttpTransportType kullanabileceği taşımaları kısıtlayan değerlerin bir numaraya bayrakları.
LongPolling Aşağıya bakın. Uzun Yoklama taşımaya özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımaya özgü ek seçenekler.
MinimumProtocolVersion 0 Anlaşma protokolünün en düşük sürümünü belirtin. Bu, istemcileri daha yeni sürümlerle sınırlamak için kullanılır.

Uzun Yoklama taşıma özelliği kullanılarak yapılandırılan ek LongPolling seçeneklere sahiptir:

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini bekleyeceği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık düzenlemesini sağlar.

WebSocket aktarım özelliği kullanılarak yapılandırılan ek seçenekler WebSockets vardır:

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapanıyorsa, istemci bu zaman aralığı içinde kapatamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilir bir temsilci. Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değerin dönmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri türünde yalıtabilirsiniz HubConnectionBuilder (.NET ve JavaScript istemcilerde kullanılabilir). Java istemcisinde de kullanılabilir, ancak oluşturucu yapılandırma seçeneklerinin yanı sıra kendisinde de alt HttpHubConnectionBuilder sınıf HubConnection mevcuttur.

Günlüğü yapılandırma

Günlük kaydı yöntemi kullanılarak .NET İstemcisi'ne ConfigureLogging yapılandırılır. Günlük sağlayıcıları ve filtreler sunucuda olduğu gibi kaydedebilirsiniz. Daha fazla bilgi için ASP.NET Core günlük kaydı belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Bir değer LogLevel yerine, bir günlük düzeyi adını string temsil eden bir değer de s hizmetlerisiniz. Sabitlere SignalR erişiminizin olmadığını ortamlarda günlüğe kaydetmeyi yapılandırarak bu LogLevel özellik yararlı olur.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

Aşağıdaki tabloda kullanılabilir günlük düzeyleri listelemektedir. Günlüğe kaydedecek configureLogging en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tablosunda bundan sonra listelenen düzeyler günlüğe kaydedilir.

Dize LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info veya information LogLevel.Information
warn veya warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklarınıza günlük kaydını yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm taşımalar varsayılan olarak etkindir.

Örneğin, Server-Sent Events taşımasını devre dışı bırakmak, ancak WebSockets ve Uzun Yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde taşımalar, için sağlanan seçenekler transport nesnesinde alanı ayarlanacak şekilde withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Java istemcisi websockets'in bu sürümünde, kullanılabilir tek aktarımdır.

Java istemcisinde taşıma, üzerinde withTransport yöntemiyle HttpHubConnectionBuilder seçilir. Java istemcisi varsayılan olarak WebSockets aktarımını kullanır.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Not

SignalRJava istemcisi henüz taşıma geri dönüş desteğine sahip değildir.

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için , istenen erişim belirteci döndüren bir işlev belirtmek üzere SignalR AccessTokenProvider seçeneğini ( accessTokenFactory JavaScript'te) kullanın. .NET İstemcisi'ne bu erişim belirteci HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçir edilir (üst bilgisi Authorization türüyle birlikte Bearer kullanılarak). JavaScript istemcisinde erişim belirteci, tarayıcı API'leri tarafından üst bilgi uygulama yeteneğinin (özellikle Server-Sent Events ve WebSockets isteklerinde) kısıtlayıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci sorgu dizesi değeri olarak access_token sağlanır.

.NET istemcisinde, AccessTokenProvider seçeneği içinde seçenekler temsilcisi kullanılarak belirtilebilir: WithUrl

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, içinde options accessTokenFactory nesnesinde alanı ayar tarafından withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

Java SignalR istemcisinde, HttpHubConnectionBuilder'abir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanmak üzere bir taşıyıcı belirteci yapılandırabilirsiniz. RxJava Single sağlamak için withAccessTokenFactory kullanın. <String> Single.defer çağrısıyla,istemciniz için erişim belirteçleri üretmek için mantık yazabilir.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımı ve canlı tutma seçeneklerini yapılandırma

Nesnenin kendi üzerinde zaman aşımı ve canlı tutma davranışını yapılandırmaya ek HubConnection seçenekler mevcuttur:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermemişse, istemci sunucunun bağlantısının kesilmiş olduğunu kabul eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu değer, bir ping iletisi sunucudan gönderilecek ve istemci tarafından zaman aşımı aralığı içinde alınacak kadar büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman vermek üzere sunucunun KeepAliveInterval değerinin en az iki katıdır.
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta el sıkışma yanıtı gönderemezse, istemci el sıkışmayı iptal eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye İstemcinin ping iletilerini hangi aralıkta gönderdiğini belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci, sunucu üzerinde kümede bir ileti ClientTimeoutInterval göndermemişse, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul ediyordur.

.NET İstemcisi'nin zaman aşımı değerleri değer olarak TimeSpan belirtilir.

Ek seçenekleri yapılandırma

Ek seçenekler, Java istemcisinde üzerinde veya üzerinde çeşitli yapılandırma API'leri üzerinde WithUrl withUrl (JavaScript'te) HubConnectionBuilder HttpHubConnectionBuilder yönteminde yalıtabilirsiniz:

.NET Seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde Taşıyıcı kimlik doğrulama belirteci olarak sağlanan bir dize döndüren işlev.
SkipNegotiation false Anlaşma true adımını atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkinleştirilmiş tek aktarım olduğunda destek olur. Bu ayar, Azure Hizmeti'nin kullanımında SignalR etkinleştirilebilir.
ClientCertificates Boş İsteklerin kimliğini doğrulamak için göndermek için bir TLS sertifikası koleksiyonu.
Cookies Boş Her HTTP cookie isteğiyle birlikte göndermek için bir HTTP koleksiyonu.
Credentials Boş Her HTTP isteğiyle birlikte göndermek için kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini kabul etmek için istemcinin kapattıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmese istemcinin bağlantısı kes.
Headers Boş Her HTTP isteğiyle birlikte göndermek için ek HTTP üst bilgileri eşlemesi.
HttpMessageHandlerFactory null HTTP isteklerini göndermek için kullanılan'ın yapılandırılması veya değiştirilmesi HttpMessageHandler için değiştirilebilir bir temsilci. WebSocket bağlantıları için kullanılamaz. Bu temsilci null olmayan bir değer döndür olmalı ve varsayılan değeri parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve bu değeri veya yeni bir örnek HttpMessageHandler geri dönüş yapın. İşleyiciyi değiştirirken, sağlanan işleyiciden tutmak istediğiniz ayarları kopyalayıp kopyalamayı unutmayın; aksi takdirde, yapılandırılan seçenekler (örneğin, s ve Headers) yeni işleyici için Cookie geçerli olmayacaktır.
Proxy null HTTP istekleri gönderirken kullanmak için bir HTTP ara sunucusu.
UseDefaultCredentials false HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini göndermek için bu boole değeri ayarlayın. Bu, kimlik doğrulamasının Windows sağlar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılmaktadır. Seçenekleri yapılandırmak için kullanılan clientWebSocketOptions örneğini alır.

.NET İstemcisi'ne sağlanan seçenekler temsilcisi tarafından bu seçenekler WithUrl değiştirilebilir:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript İstemcisi'ne sağlanan bir JavaScript nesnesinde bu seçenekler withUrl sağlanmalıdır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

Java istemcisinde bu seçenekler, HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar

JSON/MessagePack serileştirme seçenekleri

SignalRASP.NET Core , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme addJsonProtocol uzantı yöntemi kullanılarak sunucuda yalıtabilirsiniz. AddJsonProtocol, içinde Ekle'den SignalR sonra Startup.ConfigureServices eklenebilir. yöntemi, AddJsonProtocol bir nesnesi alan bir temsilci options alır. Bu nesnede PayloadSerializerOptions özelliği, bağımsız değişkenlerin seri hale getirilerini ve dönüş değerlerini yapılandırmak System.Text.Json JsonSerializerOptions için kullanılan bir nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.

Örneğin, varsayılan büyük/küçük harf adları yerine özellik adlarının büyük/küçük harf kullanımını değiştirmemek için seri hale getiriciyi yapılandırmak için içinde aşağıdaki kodu Startup.ConfigureServices kullanın:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null
    });

.NET istemcisinde AddJsonProtocol HubConnectionBuilderüzerinde aynı uzantı yöntemi vardır. Uzantı Microsoft.Extensions.DependencyInjection yöntemini çözümlemek için ad alanının içe aktarılmış olması gerekir:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Not

Şu anda JavaScript istemcisinde JSON serileştirmesini yapılandırmak mümkün değildir.

Newtonsoft.Json'a geçiş

içinde Newtonsoft.Json desteklen olmayan özelliklerine ihtiyacınız varsa System.Text.Json bkz. 'a geçiş. Newtonsoft.Json

MessagePack serileştirme seçenekleri

MessagePack serileştirme, AddMessagePackProtocol çağrısına bir temsilci sağlayarak yalıtabilirsiniz. Daha fazla SignalR ayrıntı için bkz. MessagePack'te.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirmesini yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda hub'ları yapılandırma seçenekleri SignalR açık almaktadır:

Seçenek Varsayılan değer Description
ClientTimeoutInterval 30 saniye Bu aralıkta bir ileti (keep-alive dahil) alınmamışsa, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul eder. Bu uygulamanın uygulanması nedeniyle istemcinin bağlantısı kesilmiş olarak işaretlenen bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer değerin iki KeepAliveInterval katıdır.
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye Sunucu bu aralık içinde bir ileti göndermemişse bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. KeepAliveIntervaldeğiştirirken, ServerTimeout istemcide serverTimeoutInMilliseconds veya ayarını değiştirir. Önerilen veya ServerTimeout serverTimeoutInMilliseconds değerin iki KeepAliveInterval katıdır.
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı tüm protokollere izin verilir. Tek tek hub'lar için belirli protokolleri devre dışı bırakmak için protokoller bu listeden kaldırılabilir.
EnableDetailedErrors false ise, true hub yönteminde bir özel durum atılan istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false bu özel durum iletilerinin hassas bilgiler içermesidir.
StreamBufferCapacity 10 İstemci karşıya yükleme akışları için arabelleğe adelenin maksimum öğe sayısı. Bu sınıra ulaşıldı ise, sunucu akış öğelerini işleyene kadar çağrıların işlemesi engellenir.
MaximumReceiveMessageSize 32 KB Tek bir gelen hub iletinin en büyük boyutu.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hub'lar AddSignalR için yalıtabilirsiniz. Startup.ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub'ın seçenekleri içinde sağlanan genel seçenekleri AddSignalR geçersiz kılar ve kullanılarak yalıtabilirsiniz: AddHubOptions

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

Taşımalar HttpConnectionDispatcherOptions ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde MapHub'a <T> bir temsilci geçerek Startup.Configure yapılandırılır.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

Aşağıdaki tabloda, 'nin gelişmiş HTTP ASP.NET Core SignalR yapılandırma seçenekleri açık almaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 32 KB İstemciden alınan ve sunucunun geripressure uygulamadan önce arabelleğe aldığı maksimum bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geripressure uygulamadan daha hızlı bir şekilde aladurarak bellek tüketimini artırmasını sağlar.
AuthorizationData Hub sınıfına uygulanan Authorize özniteliklerden otomatik olarak toplanan veriler. Bir istemcinin hub'a bağlanma yetkisi olup olmadığını belirlemek için kullanılan IAuthorizeData nesnelerinin listesi.
TransportMaxBufferSize 32 KB Uygulama tarafından geri baskıyı gözlemmeden önce sunucunun arabelleğe alan en fazla bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geri baskıyı bekleymeden daha hızlı arabelleğe almasını sağlar, ancak bellek tüketimini de artırabilir.
Transports Tüm Taşımalar etkindir. Bit, istemcinin bağlanmak HttpTransportType için kullanabileceği taşımaları kısıtlayan değerlerden bir numaraya sahiptir.
LongPolling Aşağıya bakın. Uzun Yoklama taşımaya özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımaya özgü ek seçenekler.
MinimumProtocolVersion 0 Anlaşma protokolünün en düşük sürümünü belirtin. Bu, istemcileri daha yeni sürümlerle sınırlamak için kullanılır.

Uzun Yoklama taşıma özelliği kullanılarak yapılandırılan ek LongPolling seçeneklere sahiptir:

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini bekleyeceği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık düzenlemesini sağlar.

WebSocket aktarım özelliği kullanılarak yapılandırılan ek seçenekler WebSockets vardır:

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapanıyorsa, istemci bu zaman aralığı içinde kapatamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilir bir temsilci. Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değerin dönmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri türünde yalıtabilirsiniz HubConnectionBuilder (.NET ve JavaScript istemcilerde kullanılabilir). Java istemcisinde de kullanılabilir, ancak oluşturucu yapılandırma seçeneklerinin yanı sıra kendisinde de alt HttpHubConnectionBuilder sınıf HubConnection mevcuttur.

Günlüğü yapılandırma

Günlük kaydı yöntemi kullanılarak .NET İstemcisi'ne ConfigureLogging yapılandırılır. Günlük sağlayıcıları ve filtreler sunucuda olduğu gibi kaydedebilirsiniz. Daha fazla bilgi için ASP.NET Core günlük kaydı belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Bir değer LogLevel yerine, bir günlük düzeyi adını string temsil eden bir değer de s hizmetlerisiniz. Sabitlere SignalR erişiminizin olmadığını ortamlarda günlüğe kaydetmeyi yapılandırarak bu LogLevel özellik yararlı olur.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

Aşağıdaki tabloda kullanılabilir günlük düzeyleri listelemektedir. Günlüğe kaydedecek configureLogging en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tablosunda bundan sonra listelenen düzeyler günlüğe kaydedilir.

Dize LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info veya information LogLevel.Information
warn veya warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklar içinde günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm taşımalar varsayılan olarak etkindir.

Örneğin, Server-Sent Events taşımasını devre dışı bırakmak, ancak WebSockets ve Uzun Yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde taşımalar, için sağlanan seçenekler transport nesnesinde alanı ayarlanacak şekilde withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Java istemcisi websockets'in bu sürümünde, kullanılabilir tek taşıma hizmetidir.

Java istemcisinde taşıma, üzerinde withTransport yöntemiyle HttpHubConnectionBuilder seçilir. Java istemcisi varsayılan olarak WebSockets taşımayı kullanır.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Not

SignalRJava istemcisi henüz taşıma geri dönüş desteğine sahip değildir.

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için, istenen erişim belirteci döndüren bir işlev belirtmek üzere SignalR AccessTokenProvider seçeneğini ( accessTokenFactory JavaScript'te) kullanın. .NET İstemcisi'ne bu erişim belirteci HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirildi (Üst bilgi Authorization türüyle birlikte Bearer kullanılarak). JavaScript istemcisinde erişim belirteci, tarayıcı API'leri tarafından üst bilgi uygulama yeteneğinin (özellikle Server-Sent Events ve WebSockets isteklerinde) kısıtlayıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci sorgu dizesi değeri olarak access_token sağlanır.

.NET istemcisinde, AccessTokenProvider seçeneği içinde seçenekler temsilcisi kullanılarak belirtilebilir: WithUrl

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, içinde options accessTokenFactory nesnesinde alanı ayararak withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

Java SignalR istemcisinde, HttpHubConnectionBuilder'abir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanmak üzere bir taşıyıcı belirteci yapılandırabilirsiniz. RxJava Single sağlamak için withAccessTokenFactory kullanın. <String> Single.defer çağrısıyla,istemciniz için erişim belirteçleri üretmek için mantık yazabilir.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımı ve canlı tutma seçeneklerini yapılandırma

Nesnenin kendi üzerinde zaman aşımı ve canlı tutma davranışını yapılandırmaya ek HubConnection seçenekler mevcuttur:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermemişse, istemci sunucunun bağlantısının kesilmiş olduğunu kabul eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu değer, bir ping iletisi sunucudan gönderilecek ve istemci tarafından zaman aşımı aralığı içinde alınacak kadar büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman vermek üzere sunucunun KeepAliveInterval değerinin en az iki katıdır.
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta el sıkışma yanıtı gönderemezse, istemci el sıkışmayı iptal eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye İstemcinin ping iletilerini hangi aralıkta gönderdiğini belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci, sunucu üzerinde kümede bir ileti ClientTimeoutInterval göndermemişse, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul ediyordur.

.NET İstemcisi'nin zaman aşımı değerleri değer olarak TimeSpan belirtilir.

Ek seçenekleri yapılandırma

Ek seçenekler, Java istemcisinde üzerinde veya üzerinde çeşitli yapılandırma API'leri üzerinde WithUrl withUrl (JavaScript'te) HubConnectionBuilder HttpHubConnectionBuilder yönteminde yalıtabilirsiniz:

.NET Seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde Taşıyıcı kimlik doğrulama belirteci olarak sağlanan bir dize döndüren işlev.
SkipNegotiation false Anlaşma adımını true atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkinleştirilmiş tek aktarım olduğunda de destekler. Bu ayar, Azure Hizmeti'nin kullanımında SignalR etkinleştirilebilir.
ClientCertificates Boş İsteklerin kimliğini doğrulamak için göndermek için bir TLS sertifikası koleksiyonu.
Cookies Boş Her HTTP cookie isteğiyle birlikte göndermek için bir HTTP koleksiyonu.
Credentials Boş Her HTTP isteğiyle birlikte göndermek için kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini kabul etmek için istemcinin kapattıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmese istemcinin bağlantısı kes.
Headers Boş Her HTTP isteğiyle birlikte göndermek için ek HTTP üst bilgileri eşlemesi.
HttpMessageHandlerFactory null HTTP isteklerini göndermek için kullanılan'ın yapılandırılması veya değiştirilmesi HttpMessageHandler için değiştirilebilir bir temsilci. WebSocket bağlantıları için kullanılamaz. Bu temsilci null olmayan bir değer döndür olmalı ve varsayılan değeri parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve bunu geri ya da yeni bir örnek HttpMessageHandler dönüş yapın. İşleyiciyi değiştirirken, sağlanan işleyiciden tutmak istediğiniz ayarları kopyalayıp kopyalamayı unutmayın; aksi takdirde, yapılandırılan seçenekler (örneğin, s ve Headers) yeni işleyici için Cookie geçerli olmayacaktır.
Proxy null HTTP istekleri gönderirken kullanmak için bir HTTP ara sunucusu.
UseDefaultCredentials false HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini göndermek için bu boole değeri ayarlayın. Bu, kimlik doğrulamasının Windows sağlar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılmaktadır. Seçenekleri yapılandırmak için kullanılan ClientWebSocketOptions örneğini alır.

.NET İstemcisi'ne sağlanan seçenekler temsilcisi tarafından bu seçenekler WithUrl değiştirilebilir:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript İstemcisi'ne sağlanan bir JavaScript nesnesinde bu seçenekler withUrl sağlanmalıdır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

Java istemcisinde bu seçenekler, HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar

JSON/MessagePack serileştirme seçenekleri

SignalRASP.NET Core , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme addJsonProtocol uzantı yöntemi kullanılarak sunucuda yalıtabilirsiniz. AddJsonProtocol, içinde Ekle'den SignalR sonra Startup.ConfigureServices eklenebilir. yöntemi, AddJsonProtocol bir nesnesi alan bir temsilci options alır. Bu nesnede PayloadSerializerOptions özelliği, bağımsız değişkenlerin seri hale getirilerini ve dönüş değerlerini yapılandırmak System.Text.Json JsonSerializerOptions için kullanılan bir nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.

Örneğin, varsayılan büyük/küçük harf adları yerine özellik adlarının büyük/küçük harf kullanımını değiştirmemek için seri hale getiriciyi yapılandırmak için içinde aşağıdaki kodu Startup.ConfigureServices kullanın:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

.NET istemcisinde AddJsonProtocol HubConnectionBuilderüzerinde aynı uzantı yöntemi vardır. Uzantı Microsoft.Extensions.DependencyInjection yöntemini çözümlemek için ad alanının içe aktarılmış olması gerekir:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Not

Şu anda JavaScript istemcisinde JSON serileştirmesini yapılandırmak mümkün değildir.

Newtonsoft.Json'a geçiş

içinde Newtonsoft.Json desteklen olmayan özelliklerine ihtiyacınız varsa System.Text.Json bkz. 'a geçiş. Newtonsoft.Json

MessagePack serileştirme seçenekleri

MessagePack serileştirme, AddMessagePackProtocol çağrısına bir temsilci sağlayarak yalıtabilirsiniz. Daha fazla SignalR ayrıntı için bkz. MessagePack'te.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirmesini yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda hub'ları yapılandırma seçenekleri SignalR açık almaktadır:

Seçenek Varsayılan değer Description
ClientTimeoutInterval 30 saniye Bu aralıkta bir ileti (keep-alive dahil) alınmamışsa, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul eder. Bu uygulamanın uygulanması nedeniyle istemcinin bağlantısı kesilmiş olarak işaretlenen bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer değerin iki KeepAliveInterval katıdır.
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye Sunucu bu aralık içinde bir ileti göndermemişse bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. KeepAliveIntervaldeğiştirirken, ServerTimeout istemcide serverTimeoutInMilliseconds veya ayarını değiştirir. Önerilen veya ServerTimeout serverTimeoutInMilliseconds değerin iki KeepAliveInterval katıdır.
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı tüm protokollere izin verilir. Tek tek hub'lar için belirli protokolleri devre dışı bırakmak için protokoller bu listeden kaldırılabilir.
EnableDetailedErrors false ise, true hub yönteminde bir özel durum atılan istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false bu özel durum iletilerinin hassas bilgiler içermesidir.
StreamBufferCapacity 10 İstemci karşıya yükleme akışları için arabelleğe adelenin maksimum öğe sayısı. Bu sınıra ulaşıldı ise, sunucu akış öğelerini işleyene kadar çağrıların işlemesi engellenir.
MaximumReceiveMessageSize 32 KB Tek bir gelen hub iletinin en büyük boyutu.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hub'lar AddSignalR için yalıtabilirsiniz. Startup.ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub'ın seçenekleri içinde sağlanan genel seçenekleri AddSignalR geçersiz kılar ve kullanılarak yalıtabilirsiniz: AddHubOptions

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

Taşımalar HttpConnectionDispatcherOptions ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde MapHub'a <T> bir temsilci geçerek Startup.Configure yapılandırılır.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

Aşağıdaki tabloda, 'nin gelişmiş HTTP ASP.NET Core SignalR yapılandırma seçenekleri açık almaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 32 KB İstemciden alınan ve sunucunun geripressure uygulamadan önce arabelleğe aldığı maksimum bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geripressure uygulamadan daha hızlı bir şekilde aladurarak bellek tüketimini artırmasını sağlar.
AuthorizationData Hub sınıfına uygulanan Authorize özniteliklerden otomatik olarak toplanan veriler. Bir istemcinin hub'a bağlanma yetkisi olup olmadığını belirlemek için kullanılan IAuthorizeData nesnelerinin listesi.
TransportMaxBufferSize 32 KB Uygulama tarafından geri baskıyı gözlemmeden önce sunucunun arabelleğe alan en fazla bayt sayısı. Bu değerin artırılması, sunucunun daha büyük iletileri geri baskıyı bekleymeden daha hızlı arabelleğe almasını sağlar, ancak bellek tüketimini de artırabilir.
Transports Tüm Taşımalar etkindir. Bir istemcinin bağlanmak için HttpTransportType kullanabileceği taşımaları kısıtlayan değerlerin bir numaraya bayrakları.
LongPolling Aşağıya bakın. Uzun Yoklama taşımaya özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımaya özgü ek seçenekler.

Uzun Yoklama taşıma özelliği kullanılarak yapılandırılan ek LongPolling seçeneklere sahiptir:

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini bekleyeceği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık düzenlemesini sağlar.

WebSocket aktarım özelliği kullanılarak yapılandırılan ek seçenekler WebSockets vardır:

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapanıyorsa, istemci bu zaman aralığı içinde kapatamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilir bir temsilci. Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değerin dönmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri türünde yalıtabilirsiniz HubConnectionBuilder (.NET ve JavaScript istemcilerde kullanılabilir). Java istemcisinde de kullanılabilir, ancak oluşturucu yapılandırma seçeneklerinin yanı sıra kendisinde de alt HttpHubConnectionBuilder sınıf HubConnection mevcuttur.

Günlüğü yapılandırma

Günlük kaydı yöntemi kullanılarak .NET İstemcisi'ne ConfigureLogging yapılandırılır. Günlük sağlayıcıları ve filtreler sunucuda olduğu gibi kaydedebilirsiniz. Daha fazla bilgi için ASP.NET Core günlük kaydı belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Bir değer LogLevel yerine, bir günlük düzeyi adını string temsil eden bir değer de s hizmetleri SSS'yi seçin. Sabitlere SignalR erişiminizin olmadığını ortamlarda günlüğe kaydetmeyi yapılandırarak bu LogLevel özellik yararlı olur.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

Aşağıdaki tabloda kullanılabilir günlük düzeyleri listelemektedir. Günlüğe kaydedecek configureLogging en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tablosunda bundan sonra listelenen düzeyler günlüğe kaydedilir.

Dize LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info veya information LogLevel.Information
warn veya warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklarınıza günlük kaydını yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm taşımalar varsayılan olarak etkindir.

Örneğin, Server-Sent Events taşımasını devre dışı bırakmak, ancak WebSockets ve Uzun Yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde taşımalar, için sağlanan seçenekler transport nesnesinde alanı ayarlanacak şekilde withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Java istemcisi websockets'in bu sürümünde, kullanılabilir tek aktarımdır.

Java istemcisinde taşıma, üzerinde withTransport yöntemiyle HttpHubConnectionBuilder seçilir. Java istemcisi varsayılan olarak WebSockets taşımayı kullanır.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Not

SignalRJava istemcisi henüz taşıma geri dönüş desteğine sahip değildir.

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için , istenen erişim belirteci döndüren bir işlev belirtmek üzere SignalR AccessTokenProvider seçeneğini ( accessTokenFactory JavaScript'te) kullanın. .NET İstemcisi'ne bu erişim belirteci HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirildi (Üst bilgi Authorization türüyle birlikte Bearer kullanılarak). JavaScript istemcisinde erişim belirteci, tarayıcı API'leri tarafından üst bilgi uygulama yeteneğinin (özellikle Server-Sent Events ve WebSockets isteklerinde) kısıtlayıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci sorgu dizesi değeri olarak access_token sağlanır.

.NET istemcisinde, AccessTokenProvider seçeneği içinde seçenekler temsilcisi kullanılarak belirtilebilir: WithUrl

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, içinde options accessTokenFactory nesnesinde alanı ayararak withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

Java SignalR istemcisinde, HttpHubConnectionBuilder'abir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanmak üzere bir taşıyıcı belirteci yapılandırabilirsiniz. RxJava Single sağlamak için withAccessTokenFactory kullanın. <String> Single.defer çağrısıyla,istemciniz için erişim belirteçleri üretmek için mantık yazabilir.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımı ve canlı tutma seçeneklerini yapılandırma

Nesnenin kendi üzerinde zaman aşımı ve canlı tutma davranışını yapılandırmaya ek HubConnection seçenekler mevcuttur:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermediyse istemci, sunucunun bağlantısını kesti ve Closed olayı tetikler ( onclose JavaScript 'te). Bu değer, ping iletisinin sunucudan gönderilmesi ve istemci tarafından zaman aşımı aralığı içinde alınması için yeterince büyük olmalıdır. Önerilen değer, ping için en az iki sunucu değeri olan bir sayıdır KeepAliveInterval .
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta bir el sıkışma yanıtı göndermezse, istemci el sıkışmasını iptal eder ve Closed olayı tetikler ( onclose JavaScript 'te). Bu, yalnızca önemli ağ gecikmesi nedeniyle el sıkışma zaman aşımı hataları gerçekleşirken değiştirilmesi gereken gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla bilgi için SignalR hub protokol belirtiminebakın.
KeepAliveInterval 15 saniye İstemcinin ping iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti gönderildiğinde, süreölçeri aralığın başına sıfırlanır. İstemci, sunucuda küme içinde bir ileti göndermediyse ClientTimeoutInterval sunucu, istemcinin bağlantısının kesileceğini kabul eder.

.NET Istemcisinde zaman aşımı değerleri değer olarak belirtilir TimeSpan .

Ek seçenekleri yapılandırma

WithUrl withUrl HubConnectionBuilder Java istemcisinde Içindeki çeşitli yapılandırma API 'lerinde veya üzerinde bulunan (JavaScript 'te) yönteminde ek seçenekler yapılandırılabilir HttpHubConnectionBuilder :

.NET seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde taşıyıcı kimlik doğrulama belirteci olarak belirtilen bir dize döndüren bir işlev.
SkipNegotiation false trueAnlaşma adımını atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkin olan tek taşıma olduğunda desteklenir. Bu ayar, Azure hizmeti kullanılırken etkinleştirilemez SignalR .
ClientCertificates Olmamalıdır Kimlik doğrulaması isteklerine gönderilmek üzere TLS sertifikaları koleksiyonu.
Cookies Olmamalıdır cookieHer HTTP isteğiyle gönderilmek üzere BIR http s koleksiyonu.
Credentials Olmamalıdır Her HTTP isteğiyle gönderilen kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini onaylaması için kapatıldıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmezse, istemci bağlantısını keser.
Headers Olmamalıdır Her HTTP isteğiyle birlikte gönderilmek üzere ek HTTP üstbilgileri haritası.
HttpMessageHandlerFactory null HTTP istekleri göndermek için kullanılan yapılandırmak veya değiştirmek için kullanılan bir temsilci HttpMessageHandler . WebSocket bağlantıları için kullanılmıyor. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri bir parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve döndürün ya da yeni bir HttpMessageHandler örnek döndürün. İşleyiciyi değiştirirken, belirtilen işleyiciden tutmak istediğiniz ayarları kopyalamadığınızdan emin olun, aksi takdirde, yapılandırılan seçenekler (örneğin, Cookie s ve üstbilgiler) yeni işleyiciye uygulanmaz.
Proxy null HTTP istekleri gönderilirken kullanılacak bir HTTP proxy 'si.
UseDefaultCredentials false Bu Boole değeri HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. bu, Windows kimlik doğrulamasının kullanımını mümkün bir şekilde sunar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılabilen bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek ClientWebSocketOptions örneğini alır.

.NET Istemcisinde bu seçenekler, aşağıdakileri yapmak için belirtilen seçenekler temsilcisinden değiştirilebilir WithUrl :

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript Istemcisinde, bu seçenekler şu şekilde sağlanmış bir JavaScript nesnesi içinde bulunabilir withUrl :

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

Java istemcisinde, bu seçenekler, içindeki döndürülen yöntemlerle yapılandırılabilir HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar

JSON/MessagePack serileştirme seçenekleri

SignalRASP.NET Core , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme, addJsonProtocol uzantı yöntemi kullanılarak sunucuda yalıtabilirsiniz. Bu yöntem, Yönteminize Ekle'den SignalR sonra Startup.ConfigureServices eklenebilir. yöntemi, AddJsonProtocol bir nesnesi alan bir temsilci options alır. Bu nesnede PayloadSerializerSettings özelliği, Json.NET ve dönüş değerlerinin seri hale getirilerini yapılandırmak için kullanılmaktadır. JsonSerializerSettings Daha fazla bilgi için, Json.NET bakın.

Örneğin, seri hale getiriciyi varsayılan büyük/küçük harf adları yerine "PascalCase" özellik adlarını kullanmak üzere yapılandırmak için içinde aşağıdaki kodu Startup.ConfigureServices kullanın:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    });

.NET istemcisinde AddJsonProtocol HubConnectionBuilderüzerinde aynı uzantı yöntemi vardır. Uzantı Microsoft.Extensions.DependencyInjection yöntemini çözümlemek için ad alanının içe aktarılmış olması gerekir:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    })
    .Build();

Not

Şu anda JavaScript istemcisinde JSON serileştirmesini yapılandırmak mümkün değildir.

MessagePack serileştirme seçenekleri

MessagePack serileştirme, AddMessagePackProtocol çağrısına bir temsilci sağlayarak yalıtabilirsiniz. Daha fazla SignalR ayrıntı için bkz. MessagePack'te.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirmesini yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda hub'ları yapılandırma seçenekleri SignalR açık almaktadır:

Seçenek Varsayılan değer Description
ClientTimeoutInterval 30 saniye Bu aralıkta bir ileti (keep-alive dahil) alınmamışsa, sunucu istemcinin bağlantısının kesilmiş olduğunu kabul eder. Bu uygulamanın uygulanması nedeniyle istemcinin bağlantısı kesilmiş olarak işaretlenen bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer değerin iki KeepAliveInterval katıdır.
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye Sunucu bu aralık içinde bir ileti göndermemişse bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. KeepAliveIntervaldeğiştirirken, ServerTimeout istemcide serverTimeoutInMilliseconds veya ayarını değiştirir. Önerilen veya ServerTimeout serverTimeoutInMilliseconds değerin iki KeepAliveInterval katıdır.
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı tüm protokollere izin verilir. Tek tek hub'lar için belirli protokolleri devre dışı bırakmak için protokoller bu listeden kaldırılabilir.
EnableDetailedErrors false ise, true hub yönteminde bir özel durum atılan istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false bu özel durum iletilerinin hassas bilgiler içermesidir.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hub'lar AddSignalR için yalıtabilirsiniz. Startup.ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub'ın seçenekleri içinde sağlanan genel seçenekleri AddSignalR geçersiz kılar ve kullanılarak yalıtabilirsiniz: AddHubOptions

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

Taşımalar HttpConnectionDispatcherOptions ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde MapHub'a <T> bir temsilci geçerek Startup.Configure yapılandırılır.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSignalR((configure) =>
    {
        var desiredTransports =
            HttpTransportType.WebSockets |
            HttpTransportType.LongPolling;

        configure.MapHub<ChatHub>("/chathub", (options) =>
        {
            options.Transports = desiredTransports;
        });
    });
}

Aşağıdaki tabloda, 'nin gelişmiş HTTP ASP.NET Core SignalR yapılandırma seçenekleri açık almaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 32 KB Sunucunun arabelleğe aldığı istemciden alınan en fazla bayt sayısı. Bu değerin artırılması sunucunun daha büyük iletiler alasını sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir.
AuthorizationData Hub sınıfına uygulanan Authorize özniteliklerden otomatik olarak toplanan veriler. Bir istemcinin hub'a bağlanma yetkisi olup olmadığını belirlemek için kullanılan IAuthorizeData nesnelerinin listesi.
TransportMaxBufferSize 32 KB Sunucu tarafından arabelleğe alınan uygulama tarafından gönderilen en fazla bayt sayısı. Bu değerin artırılması sunucunun daha büyük iletiler göndermesine olanak sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir.
Transports Tüm Taşımalar etkindir. Bir istemcinin bağlanmak için HttpTransportType kullanabileceği taşımaları kısıtlayan değerlerin bir numaraya bayrakları.
LongPolling Aşağıya bakın. Uzun Yoklama taşımaya özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımaya özgü ek seçenekler.

Uzun Yoklama taşıma özelliği kullanılarak yapılandırılan ek LongPolling seçeneklere sahiptir:

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini bekleyeceği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık düzenlemesini sağlar.

WebSocket aktarım özelliği kullanılarak yapılandırılan ek seçenekler WebSockets vardır:

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapanıyorsa, istemci bu zaman aralığı içinde kapatamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilir bir temsilci. Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değerin dönmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri türünde yalıtabilirsiniz HubConnectionBuilder (.NET ve JavaScript istemcilerde kullanılabilir). Java istemcisinde de kullanılabilir, ancak oluşturucu yapılandırma seçeneklerinin yanı sıra kendisinde de bulunan alt HttpHubConnectionBuilder HubConnection sınıftır.

Günlüğü yapılandırma

Günlük kaydı yöntemi kullanılarak .NET İstemcisi'ne ConfigureLogging yapılandırılır. Günlük sağlayıcıları ve filtreler sunucuda olduğu gibi kaydedebilirsiniz. Daha fazla bilgi için ASP.NET Core günlük kaydı belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklar içinde günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.

Örneğin, Server-Sent olay taşımasını devre dışı bırakmak, ancak WebSockets ve uzun yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde aktarımlar, transport için belirtilen seçenekler nesnesindeki alanı ayarlanarak yapılandırılır withUrl :

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Java Client WebSockets 'in bu sürümünde, kullanılabilir tek aktarım bir sürümdür.

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için SignalR , AccessTokenProvider accessTokenFactory istenen erişim belirtecini döndüren bir işlevi belirtmek Için seçeneğini (JavaScript 'te) kullanın. .NET Istemcisinde, bu erişim belirteci HTTP "taşıyıcı kimlik doğrulaması" belirteci olarak geçirilir ( Authorization bir türü olan üst bilgi kullanılarak Bearer ). JavaScript istemcisinde, tarayıcı API 'Lerinin üstbilgileri uygulama özelliğini (özellikle de Server-Sent olayları ve WebSockets istekleri) kısıtlayacağı birkaç durum dışında , erişim belirteci bir taşıyıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci bir sorgu dizesi değeri olarak sağlanır access_token .

.NET istemcisinde AccessTokenProvider seçeneği, içindeki seçenekler temsilcisi kullanılarak belirtilebilir WithUrl :

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, accessTokenFactory içindeki seçenekler nesnesindeki alanı ayarlanarak yapılandırılır withUrl :

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

SignalRJava istemcisinde, Httphubconnectionbuilder'a bir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak bir taşıyıcı belirteç yapılandırabilirsiniz. Bir Rxjava Single <String> sağlamak Için withaccesstokenfactory kullanın. Tek. erteleçağrısıyla, istemciniz için erişim belirteçleri oluşturmak üzere mantık yazabilirsiniz.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımını yapılandırın ve canlı tut seçeneklerini yapılandırın

Zaman aşımını ve canlı tutma davranışını yapılandırmaya yönelik ek seçenekler HubConnection nesnenin kendisinde bulunabilir:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermediyse istemci, sunucunun bağlantısını kesti ve Closed olayı tetikler ( onclose JavaScript 'te). Bu değer, ping iletisinin sunucudan gönderilmesi ve istemci tarafından zaman aşımı aralığı içinde alınması için yeterince büyük olmalıdır. Önerilen değer, ping için en az iki sunucu değeri olan bir sayıdır KeepAliveInterval .
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta bir el sıkışma yanıtı göndermezse, istemci el sıkışmasını iptal eder ve Closed olayı tetikler ( onclose JavaScript 'te). Bu, yalnızca önemli ağ gecikmesi nedeniyle el sıkışma zaman aşımı hataları gerçekleşirken değiştirilmesi gereken gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla bilgi için SignalR hub protokol belirtiminebakın.
KeepAliveInterval 15 saniye İstemcinin ping iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti gönderildiğinde, süreölçeri aralığın başına sıfırlanır. İstemci, sunucuda küme içinde bir ileti göndermediyse ClientTimeoutInterval sunucu, istemcinin bağlantısının kesileceğini kabul eder.

.NET Istemcisinde zaman aşımı değerleri değer olarak belirtilir TimeSpan .

Ek seçenekleri yapılandırma

WithUrl withUrl HubConnectionBuilder Java istemcisinde Içindeki çeşitli yapılandırma API 'lerinde veya üzerinde bulunan (JavaScript 'te) yönteminde ek seçenekler yapılandırılabilir HttpHubConnectionBuilder :

.NET seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde taşıyıcı kimlik doğrulama belirteci olarak belirtilen bir dize döndüren bir işlev.
SkipNegotiation false trueAnlaşma adımını atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkin olan tek taşıma olduğunda desteklenir. Bu ayar, Azure hizmeti kullanılırken etkinleştirilemez SignalR .
ClientCertificates Olmamalıdır Kimlik doğrulaması isteklerine gönderilmek üzere TLS sertifikaları koleksiyonu.
Cookies Olmamalıdır cookieHer HTTP isteğiyle gönderilmek üzere BIR http s koleksiyonu.
Credentials Olmamalıdır Her HTTP isteğiyle gönderilen kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini onaylaması için kapatıldıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmezse, istemci bağlantısını keser.
Headers Olmamalıdır Her HTTP isteğiyle birlikte gönderilmek üzere ek HTTP üstbilgileri haritası.
HttpMessageHandlerFactory null HTTP istekleri göndermek için kullanılan yapılandırmak veya değiştirmek için kullanılan bir temsilci HttpMessageHandler . WebSocket bağlantıları için kullanılmıyor. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri bir parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve döndürün ya da yeni bir HttpMessageHandler örnek döndürün. İşleyiciyi değiştirirken, belirtilen işleyiciden tutmak istediğiniz ayarları kopyalamadığınızdan emin olun, aksi takdirde, yapılandırılan seçenekler (örneğin, Cookie s ve üstbilgiler) yeni işleyiciye uygulanmaz.
Proxy null HTTP istekleri gönderilirken kullanılacak bir HTTP proxy 'si.
UseDefaultCredentials false Bu Boole değeri HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. bu, Windows kimlik doğrulamasının kullanımını mümkün bir şekilde sunar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılabilen bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek ClientWebSocketOptions örneğini alır.

.NET İstemcisi'ne sağlanan seçenekler temsilcisi tarafından bu seçenekler WithUrl değiştirilebilir:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript İstemcisi'ne sağlanan bir JavaScript nesnesinde bu seçenekler withUrl sağlanmalıdır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

Java istemcisinde bu seçenekler, HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar

JSON/MessagePack serileştirme seçenekleri

SignalRASP.NET Core , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.

JSON serileştirme, addJsonProtocol uzantı yöntemi kullanılarak sunucuda yalıtabilirsiniz. Bu yöntem, Yönteminize Ekle'den SignalR sonra Startup.ConfigureServices eklenebilir. yöntemi, AddJsonProtocol bir nesnesi alan bir temsilci options alır. Bu nesnede PayloadSerializerSettings özelliği, Json.NET ve dönüş değerlerinin seri hale getirilerini yapılandırmak için kullanılmaktadır. JsonSerializerSettings Daha fazla bilgi için, Json.NET bakın.

Örneğin, seri hale getiriciyi varsayılan büyük/küçük harf adları yerine "PascalCase" özellik adlarını kullanmak üzere yapılandırmak için içinde aşağıdaki kodu Startup.ConfigureServices kullanın:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    });

.NET istemcisinde AddJsonProtocol HubConnectionBuilderüzerinde aynı uzantı yöntemi vardır. Uzantı Microsoft.Extensions.DependencyInjection yöntemini çözümlemek için ad alanının içe aktarılmış olması gerekir:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    })
    .Build();

Not

Şu anda JavaScript istemcisinde JSON serileştirmesini yapılandırmak mümkün değildir.

MessagePack serileştirme seçenekleri

MessagePack serileştirme, AddMessagePackProtocol çağrısına bir temsilci sağlayarak yalıtabilirsiniz. Daha fazla SignalR ayrıntı için bkz. MessagePack'te.

Not

Şu anda JavaScript istemcisinde MessagePack serileştirmesini yapılandırmak mümkün değildir.

Sunucu seçeneklerini yapılandırma

Aşağıdaki tabloda hub'ları yapılandırma seçenekleri SignalR açık almaktadır:

Seçenek Varsayılan değer Description
HandshakeTimeout 15 saniye İstemci bu zaman aralığı içinde bir ilk el sıkışma iletisi göndermezse bağlantı kapatılır. Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.
KeepAliveInterval 15 saniye Sunucu bu aralık içinde bir ileti göndermemişse bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. KeepAliveIntervaldeğiştirirken, ServerTimeout istemcide serverTimeoutInMilliseconds veya ayarını değiştirir. Önerilen veya ServerTimeout serverTimeoutInMilliseconds değerin iki KeepAliveInterval katıdır.
SupportedProtocols Tüm yüklü protokoller Bu hub tarafından desteklenen protokoller. Varsayılan olarak, sunucuda kayıtlı tüm protokollere izin verilir. Tek tek hub'lar için belirli protokolleri devre dışı bırakmak için protokoller bu listeden kaldırılabilir.
EnableDetailedErrors false ise, true hub yönteminde bir özel durum atılan istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer, false bu özel durum iletilerinin hassas bilgiler içermesidir.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hub'lar AddSignalR için yalıtabilirsiniz. Startup.ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Tek bir hub'ın seçenekleri içinde sağlanan genel seçenekleri geçersiz AddSignalR kılar ve kullanılarak yalıtabilirsiniz: AddHubOptions

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Gelişmiş HTTP yapılandırma seçenekleri

Taşımalar HttpConnectionDispatcherOptions ve bellek arabellek yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın. Bu seçenekler, içinde MapHub'a <T> bir temsilci geçerek Startup.Configure yapılandırılır.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSignalR((configure) =>
    {
        var desiredTransports =
            HttpTransportType.WebSockets |
            HttpTransportType.LongPolling;

        configure.MapHub<ChatHub>("/chathub", (options) =>
        {
            options.Transports = desiredTransports;
        });
    });
}

Aşağıdaki tabloda, 'nin gelişmiş HTTP ASP.NET Core SignalR yapılandırma seçenekleri açık almaktadır:

Seçenek Varsayılan değer Description
ApplicationMaxBufferSize 32 KB Sunucunun arabelleğe aldığı istemciden alınan en fazla bayt sayısı. Bu değerin artırılması sunucunun daha büyük iletiler alasını sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir.
AuthorizationData Hub sınıfına uygulanan Authorize özniteliklerden otomatik olarak toplanan veriler. Bir istemcinin hub'a bağlanma yetkisi olup olmadığını belirlemek için kullanılan IAuthorizeData nesnelerinin listesi.
TransportMaxBufferSize 32 KB Sunucu tarafından arabelleğe alınan uygulama tarafından gönderilen en fazla bayt sayısı. Bu değerin artırılması sunucunun daha büyük iletiler göndermesine olanak sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir.
Transports Tüm Taşımalar etkindir. Bir istemcinin bağlanmak için HttpTransportType kullanabileceği taşımaları kısıtlayan değerlerin bir numaraya bayrakları.
LongPolling Aşağıya bakın. Uzun Yoklama taşımaya özgü ek seçenekler.
WebSockets Aşağıya bakın. WebSockets taşımaya özgü ek seçenekler.

Uzun Yoklama taşıma özelliği kullanılarak yapılandırılan ek LongPolling seçeneklere sahiptir:

Seçenek Varsayılan değer Description
PollTimeout 90 saniye Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini bekleyeceği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık düzenlemesini sağlar.

WebSocket aktarım özelliği kullanılarak yapılandırılan ek seçenekler WebSockets vardır:

Seçenek Varsayılan değer Description
CloseTimeout 5 saniye Sunucu kapanıyorsa, istemci bu zaman aralığı içinde kapatamazsa bağlantı sonlandırılır.
SubProtocolSelector null Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilir bir temsilci. Temsilci, istemci tarafından istenen değerleri girdi olarak alır ve istenen değerin dönmesi beklenir.

İstemci seçeneklerini yapılandırma

İstemci seçenekleri türünde yalıtabilirsiniz HubConnectionBuilder (.NET ve JavaScript istemcilerde kullanılabilir). Java istemcisinde de kullanılabilir, ancak oluşturucu yapılandırma seçeneklerinin yanı sıra kendisinde de bulunan alt HttpHubConnectionBuilder HubConnection sınıftır.

Günlüğü yapılandırma

Günlük kaydı yöntemi kullanılarak .NET İstemcisi'ne ConfigureLogging yapılandırılır. Günlük sağlayıcıları ve filtreler sunucuda olduğu gibi kaydedebilirsiniz. Daha fazla bilgi için ASP.NET Core günlük kaydı belgelerine bakın.

Not

Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için docs'un Yerleşik günlük sağlayıcıları bölümüne bakın.

Örneğin, Konsol günlüğünü etkinleştirmek için NuGet Microsoft.Extensions.Logging.Console yükleyin. Uzantı AddConsole yöntemini çağırma:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

JavaScript istemcisinde benzer bir configureLogging yöntem vardır. Üretecek LogLevel günlük iletilerinin en düşük düzeyini belirten bir değer sağlar. Günlükler tarayıcı konsol penceresine yazılır.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Not

Günlüğü tamamen devre dışı bırakmak için signalR.LogLevel.None yönteminde configureLogging belirtin.

Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama SignalR belgelerine bakın.

SignalRJava istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlüğe kaydetme bağımlılığını getirerek kendi özel günlük uygulamasını seçmelerine olanak sağlayan üst düzey bir günlük API'dir. Aşağıdaki kod parçacığında Java istemcisiyle java.util.logging nasıl SignalR kullanabileceğiniz göstermektedir.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Bağımlılıklarınıza günlük kaydını yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlem olmayan günlükçer yükler:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Bu güvenli bir şekilde yoksayılabilir.

İzin verilen taşımaları yapılandırma

tarafından kullanılan taşımalar SignalR çağrısında ya da WithUrl withUrl (JavaScript'te). istemcisini yalnızca belirtilen taşımaları kullanmak üzere kısıtlamak için bitwise OR HttpTransportType değerleri kullanılabilir. Tüm taşımalar varsayılan olarak etkindir.

Örneğin, Server-Sent Events taşımasını devre dışı bırakmak, ancak WebSockets ve Uzun Yoklama bağlantılarına izin vermek için:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

JavaScript istemcisinde taşımalar, için sağlanan seçenekler transport nesnesinde alanı ayarlanacak şekilde withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Taşıyıcı kimlik doğrulamasını yapılandırma

Kimlik doğrulama verilerini isteklerle birlikte sağlamak için , istenen erişim belirteci döndüren bir işlev belirtmek üzere SignalR AccessTokenProvider seçeneğini ( accessTokenFactory JavaScript'te) kullanın. .NET İstemcisi'ne bu erişim belirteci HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirildi (Üst bilgi Authorization türüyle birlikte Bearer kullanılarak). JavaScript istemcisinde erişim belirteci, tarayıcı API'leri tarafından üst bilgi uygulama yeteneğinin (özellikle Server-Sent Events ve WebSockets isteklerinde) kısıtlayıcı belirteci olarak kullanılır. Bu durumlarda, erişim belirteci sorgu dizesi değeri olarak access_token sağlanır.

.NET istemcisinde, AccessTokenProvider seçeneği içinde seçenekler temsilcisi kullanılarak belirtilebilir: WithUrl

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

JavaScript istemcisinde erişim belirteci, içinde options accessTokenFactory nesnesinde alanı ayararak withUrl yapılandırılır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

Java SignalR istemcisinde, HttpHubConnectionBuilder'abir erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanmak üzere bir taşıyıcı belirteci yapılandırabilirsiniz. RxJava Single sağlamak için withAccessTokenFactory kullanın. <String> Single.defer çağrısıyla,istemciniz için erişim belirteçleri üretmek için mantık yazabilir.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Zaman aşımı ve canlı tutma seçeneklerini yapılandırma

Nesnenin kendi üzerinde zaman aşımı ve canlı tutma davranışını yapılandırmaya ek HubConnection seçenekler mevcuttur:

Seçenek Varsayılan değer Description
ServerTimeout 30 saniye (30.000 milisaniye) Sunucu etkinliği için zaman aşımı. Sunucu bu aralıkta bir ileti göndermemişse, istemci sunucunun bağlantısının kesilmiş olduğunu kabul eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu değer, bir ping iletisi sunucudan gönderilecek ve istemci tarafından zaman aşımı aralığı içinde alınacak kadar büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman vermek üzere sunucunun KeepAliveInterval değerinin en az iki katıdır.
HandshakeTimeout 15 saniye İlk sunucu el sıkışması için zaman aşımı. Sunucu bu aralıkta el sıkışma yanıtı gönderemezse, istemci el sıkışmayı iptal eder ve olayı Closed tetikler ( onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluştuğunda değiştirilecek gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz. SignalR Hub Protokolü Belirtimi.

.NET İstemcisi'nin zaman aşımı değerleri değer olarak TimeSpan belirtilir.

Ek seçenekleri yapılandırma

Ek seçenekler, Java istemcisinde üzerinde veya üzerinde çeşitli yapılandırma API'leri üzerinde WithUrl withUrl (JavaScript'te) HubConnectionBuilder HttpHubConnectionBuilder yönteminde yalıtabilirsiniz:

.NET Seçeneği Varsayılan değer Description
AccessTokenProvider null HTTP isteklerinde Taşıyıcı kimlik doğrulama belirteci olarak sağlanan bir dize döndüren işlev.
SkipNegotiation false Anlaşma adımını true atlamak için bunu olarak ayarlayın. Yalnızca WebSockets taşıması etkinleştirilmiş tek aktarım olduğunda de destekler. Bu ayar, Azure Hizmeti'nin kullanımında SignalR etkinleştirilebilir.
ClientCertificates Boş İsteklerin kimliğini doğrulamak için göndermek için bir TLS sertifikası koleksiyonu.
Cookies Boş Her HTTP cookie isteğiyle birlikte göndermek için bir HTTP koleksiyonu.
Credentials Boş Her HTTP isteğiyle birlikte göndermek için kimlik bilgileri.
CloseTimeout 5 saniye Yalnızca WebSockets. Sunucunun kapatma isteğini kabul etmek için istemcinin kapattıktan sonra bekleyeceği en uzun süre. Sunucu bu süre içinde kapatmayı kabul etmese istemcinin bağlantısı kes.
Headers Boş Her HTTP isteğiyle birlikte göndermek için ek HTTP üst bilgileri eşlemesi.
HttpMessageHandlerFactory null HTTP isteklerini göndermek için kullanılan'ın yapılandırılması veya değiştirilmesi HttpMessageHandler için değiştirilebilir bir temsilci. WebSocket bağlantıları için kullanılamaz. Bu temsilci null olmayan bir değer döndür olmalı ve varsayılan değeri parametre olarak alır. Bu varsayılan değerde ayarları değiştirin ve bunu geri ya da yeni bir örnek HttpMessageHandler dönüş yapın. İşleyiciyi değiştirirken, sağlanan işleyiciden tutmak istediğiniz ayarları kopyalayıp kopyalamayı unutmayın; aksi takdirde, yapılandırılan seçenekler (örneğin, s ve Headers) yeni işleyici için Cookie geçerli olmayacaktır.
Proxy null HTTP istekleri gönderirken kullanmak için bir HTTP ara sunucusu.
UseDefaultCredentials false HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini göndermek için bu boole değeri ayarlayın. Bu, kimlik doğrulamasının Windows sağlar.
WebSocketConfiguration null Ek WebSocket seçeneklerini yapılandırmak için kullanılmaktadır. Seçenekleri yapılandırmak için kullanılan ClientWebSocketOptions örneğini alır.

.NET İstemcisi'ne sağlanan seçenekler temsilcisi tarafından bu seçenekler WithUrl değiştirilebilir:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

JavaScript İstemcisi'ne sağlanan bir JavaScript nesnesinde bu seçenekler withUrl sağlanmalıdır:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

Java istemcisinde bu seçenekler, HttpHubConnectionBuilder``HubConnectionBuilder.create("HUB URL")

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Ek kaynaklar