ASP.NET Core SignalR yapılandırması
Bu makale ASP.NET Core SignalR yapılandırmasını kapsar.
BlazorSignalR Bu makaledeki yönergeleri ekleyen veya yerine geçen yönergeler için bkz. ASP.NET Temel BlazorSignalR kılavuz.
JSON/MessagePack serileştirme seçenekleri
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Startup.ConfigureServices
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Program.cs
aşağıdaki kodu kullanın:
builder.Services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
MaximumParallelInvocationsPerClient |
1 | Her istemcinin kuyruğa almadan önce paralel olarak çağırabileceği en fazla hub yöntemi sayısı. |
DisableImplicitFromServicesParameters |
false |
Hub yöntemi bağımsız değişkenleri mümkünse DI'den çözümlenir. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Program.cs
için yapılandırılabilir.
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Program.cs
geçirilerek yapılandırılır.
using Microsoft.AspNetCore.Http.Connections;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chathub", options =>
{
options.Transports =
HttpTransportType.WebSockets |
HttpTransportType.LongPolling;
}
);
app.Run();
Aşağıdaki tabloda, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
64 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
64 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına ö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ümlere sınırlamak için kullanılır. |
CloseOnAuthenticationExpiration |
yanlış | Bir belirtecin süresi dolduğunda bağlantıları kapatacak kimlik doğrulaması süre sonu izlemeyi etkinleştirmek için bu seçeneği ayarlayın. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Zaman aşımı ve canlı tutma davranışını yapılandırmak için ek seçenekler:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
WithServerTimeout |
30 saniye (30.000 milisaniye) | Sunucu etkinliği için zaman aşımı ve doğrudan üzerinde HubConnectionBuilderayarlanır. Sunucu bu aralıkta bir ileti göndermediyse, istemci sunucunun bağlantısının kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, ping'lerin ulaşmasına izin vermek için sunucunun etkin tutma aralığı (WithKeepAliveInterval ) değerinin en az iki katı bir sayıdır. |
HandshakeTimeout |
15 saniye | İlk sunucu el sıkışması için zaman aşımı ve nesnenin HubConnection kendisinde kullanılabilir. Sunucu bu aralıkta el sıkışma yanıtı göndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken gelişmiş bir ayardır. El sıkışma işlemi hakkında daha fazla ayrıntı için bkz SignalR . Hub Protokolü Belirtimi. |
WithKeepAliveInterval |
15 saniye | İstemcinin ping iletileri gönderdiği aralığı belirler ve doğrudan üzerinde HubConnectionBuilderayarlanır. Bu ayar, sunucunun bir istemcinin bilgisayarını ağdan çıkarması gibi sabit bağlantı kesilmelerini algılamasına olanak tanır. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Aşağıdaki örnekte, varsayılan değerlerin iki katı olan değerler gösterilmektedir:
var builder = new HubConnectionBuilder()
.WithUrl(Navigation.ToAbsoluteUri("/chathub"))
.WithServerTimeout(TimeSpan.FromSeconds(60))
.WithKeepAliveInterval(TimeSpan.FromSeconds(30))
.Build();
builder.On<string, string>("ReceiveMessage", (user, message) => ...
await builder.StartAsync();
Durum bilgisi olan yeniden bağlanmayı yapılandırma
SignalR durum bilgisi olan yeniden bağlantı, ağ bağlantıları arasında geçiş yapma veya erişimde kısa bir geçici kayıp gibi ağ bağlantılarında geçici bağlantı kesilen istemcilerin algılanan kapalı kalma süresini azaltır.
Durum bilgisi olan yeniden bağlantı bunu şu şekilde elde eder:
- Sunucu ve istemcideki veriler geçici olarak arabelleğe alınıyor.
- Hem sunucu hem de istemci tarafından alınan iletileri (ACK-ing) kabul etme.
- Bağlantının ne zaman çalışır durumda olduğunu tanıma ve bağlantı devre dışıyken gönderilmiş olabilecek iletileri yeniden yürütme.
Durum bilgisi olan yeniden bağlantı, ASP.NET Core 8.0 ve sonraki sürümlerde kullanılabilir.
Hem sunucu hub'ı uç noktasında hem de istemcide durum bilgisi olan yeniden bağlanmayı kabul edin:
Şu seçeneği etkinleştirmek için sunucu hub'ı uç noktası yapılandırmasını güncelleştirin
AllowStatefulReconnects
:app.MapHub<MyHub>("/hubName", options => { options.AllowStatefulReconnects = true; });
İsteğe bağlı olarak, sunucunun izin verdiği bayt cinsinden maksimum arabellek boyutu genel olarak veya belirli bir hub için şu seçenekle
StatefulReconnectBufferSize
ayarlanabilir:Genel
StatefulReconnectBufferSize
olarak ayarlanan seçenek:builder.AddSignalR(o => o.StatefulReconnectBufferSize = 1000);
StatefulReconnectBufferSize
Belirli bir hub için ayarlanan seçenek:builder.AddSignalR().AddHubOptions<MyHub>(o => o.StatefulReconnectBufferSize = 1000);
Seçenek
StatefulReconnectBufferSize
, varsayılan olarak 100.000 bayt olan isteğe bağlıdır.Seçeneği etkinleştirmek için JavaScript veya TypeScript istemci kodunu güncelleştirin
withStatefulReconnect
:const builder = new signalR.HubConnectionBuilder() .withUrl("/hubname") .withStatefulReconnect({ bufferSize: 1000 }); // Optional, defaults to 100,000 const connection = builder.build();
Seçenek
bufferSize
, varsayılan olarak 100.000 bayt olan isteğe bağlıdır.Seçeneği etkinleştirmek için .NET istemci kodunu güncelleştirin
WithStatefulReconnect
:var builder = new HubConnectionBuilder() .WithUrl("<hub url>") .WithStatefulReconnect(); builder.Services.Configure<HubConnectionOptions>(o => o.StatefulReconnectBufferSize = 1000); var hubConnection = builder.Build();
Seçenek
StatefulReconnectBufferSize
, varsayılan olarak 100.000 bayt olan isteğe bağlıdır.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
ApplicationMaxBufferSize |
1 MB | İstemcinin geri baskı uygulamadan önce sunucudan aldığı maksimum bayt sayısı. Bu değerin artırılması, istemcinin geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
1 MB | kullanıcı uygulaması tarafından gönderilen ve istemcinin geri baskıyı gözlemlemeden önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, istemcinin geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.
JSON serileştirmesi, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. Bu yöntem, yönteminizden Startup.ConfigureServices
sonra AddSignalR eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerSettings nesnedeki özelliği, bağımsız değişkenlerin serileştirilmesini yapılandırmak ve değerleri döndürmek için kullanılabilecek bir Json.NET JsonSerializerSettings
nesnesidir. Daha fazla bilgi için Json.NET belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine "PascalCase" özellik adlarını kullanacak şekilde yapılandırmak için içinde Startup.ConfigureServices
aşağıdaki kodu kullanın:
services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerSettings.ContractResolver =
new DefaultContractResolver();
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Startup.ConfigureServices
için yapılandırılabilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
}
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Startup.Configure
geçirilerek 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, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
32 KB | Sunucunun arabelleğe aldığı istemciden alınan bayt sayısı üst sınırı. Bu değerin artırılması sunucunun daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
TransportMaxBufferSize |
32 KB | Sunucunun arabelleğe aldığı uygulama tarafından gönderilen bayt sayısı üst sınırı. Bu değerin artırılması sunucunun daha büyük iletiler göndermesine olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına özgü ek seçenekler. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu 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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , iletileri kodlamak için iki protokolü destekler: JSON ve MessagePack. Her protokolün serileştirme yapılandırma seçenekleri vardır.
JSON serileştirmesi, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. Bu yöntem, yönteminizden Startup.ConfigureServices
sonra AddSignalR eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerSettings nesnedeki özelliği, bağımsız değişkenlerin serileştirilmesini yapılandırmak ve değerleri döndürmek için kullanılabilecek bir Json.NET JsonSerializerSettings
nesnesidir. Daha fazla bilgi için Json.NET belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine "PascalCase" özellik adlarını kullanacak şekilde yapılandırmak için içinde Startup.ConfigureServices
aşağıdaki kodu kullanın:
services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerSettings.ContractResolver =
new DefaultContractResolver();
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Startup.ConfigureServices
için yapılandırılabilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
}
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Startup.Configure
geçirilerek 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, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
32 KB | Sunucunun arabelleğe aldığı istemciden alınan bayt sayısı üst sınırı. Bu değerin artırılması sunucunun daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
TransportMaxBufferSize |
32 KB | Sunucunun arabelleğe aldığı uygulama tarafından gönderilen bayt sayısı üst sınırı. Bu değerin artırılması sunucunun daha büyük iletiler göndermesine olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına özgü ek seçenekler. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu 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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Startup.ConfigureServices
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Startup.ConfigureServices
aşağıdaki kodu kullanın:
services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Startup.ConfigureServices
için yapılandırılabilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
}
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Startup.Configure
geçirilerek 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, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
32 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha hızlı bir şekilde daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
TransportMaxBufferSize |
32 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına özgü ek seçenekler. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Startup.ConfigureServices
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Startup.ConfigureServices
aşağıdaki kodu kullanın:
services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Startup.ConfigureServices
için yapılandırılabilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
}
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Startup.Configure
geçirilerek 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, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
32 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha hızlı bir şekilde daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
TransportMaxBufferSize |
32 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına ö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ümlere sınırlamak için kullanılır. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Startup.ConfigureServices
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Startup.ConfigureServices
aşağıdaki kodu kullanın:
services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
MaximumParallelInvocationsPerClient |
1 | Her istemcinin kuyruğa almadan önce paralel olarak çağırabileceği en fazla hub yöntemi sayısı. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Startup.ConfigureServices
için yapılandırılabilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
}
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Startup.Configure
geçirilerek 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, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
32 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha hızlı bir şekilde daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
TransportMaxBufferSize |
32 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına ö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ümlere sınırlamak için kullanılır. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Program.cs
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Program.cs
aşağıdaki kodu kullanın:
builder.Services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
MaximumParallelInvocationsPerClient |
1 | Her istemcinin kuyruğa almadan önce paralel olarak çağırabileceği en fazla hub yöntemi sayısı. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Program.cs
için yapılandırılabilir.
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Program.cs
geçirilerek yapılandırılır.
using Microsoft.AspNetCore.Http.Connections;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chathub", options =>
{
options.Transports =
HttpTransportType.WebSockets |
HttpTransportType.LongPolling;
}
);
app.Run();
Aşağıdaki tabloda, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
64 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
64 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına ö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ümlere sınırlamak için kullanılır. |
CloseOnAuthenticationExpiration |
yanlış | Bir belirtecin süresi dolduğunda bağlantıları kapatacak kimlik doğrulaması süre sonu izlemeyi etkinleştirmek için bu seçeneği ayarlayın. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
ApplicationMaxBufferSize |
1 MB | İstemcinin geri baskı uygulamadan önce sunucudan aldığı maksimum bayt sayısı. Bu değerin artırılması, istemcinin geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
1 MB | kullanıcı uygulaması tarafından gönderilen ve istemcinin geri baskıyı gözlemlemeden önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, istemcinin geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core SignalR , 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, uzantı yöntemi kullanılarak AddJsonProtocol sunucuda yapılandırılabilir. AddJsonProtocol
içinde sonra AddSignalR Startup.ConfigureServices
eklenebilir. yöntemi, AddJsonProtocol
nesne alan bir options
temsilci alır. Bu PayloadSerializerOptions nesnedeki özelliği, bağımsız değişkenlerin serileştirmesini ve dönüş değerlerini yapılandırmak için kullanılabilecek bir System.Text.Json
JsonSerializerOptions nesnedir. Daha fazla bilgi için System.Text.Json belgelerine bakın.
Örneğin, seri hale getiriciyi varsayılan deve olayı adları yerine özellik adlarının büyük/küçük harflerini değiştirmeyecek şekilde yapılandırmak için içinde Program.cs
aşağıdaki kodu kullanın:
builder.Services.AddSignalR()
.AddJsonProtocol(options => {
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});
.NET istemcisinde, üzerinde HubConnectionBuilderaynı AddJsonProtocol
uzantı yöntemi vardır. Microsoft.Extensions.DependencyInjection
Uzantı yöntemini çözümlemek için ad alanının içeri aktarılması 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ştirmeyi yapılandırmak mümkün değildir.
Newtonsoft.Json'a geçiş yapma
içinde desteklenmeyen Newtonsoft.Json
özelliklerine ihtiyacınız varsa bkz. geçiş yapmaNewtonsoft.Json
.System.Text.Json
MessagePack serileştirme seçenekleri
MessagePack serileştirmesi, çağrı için AddMessagePackProtocol bir temsilci sağlanarak yapılandırılabilir. Daha fazla ayrıntı için bkz . messagepack in SignalR .
Not
Şu anda JavaScript istemcisinde MessagePack serileştirmeyi yapılandırmak mümkün değildir.
Sunucu seçeneklerini yapılandırma
Aşağıdaki tabloda hub'ları yapılandırma SignalR seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ClientTimeoutInterval |
30 saniye | Sunucu, bu aralıkta bir ileti (canlı tutma dahil) almadıysa istemcinin bağlantısının kesilmiş olduğunu düşünür. Bunun uygulanması nedeniyle istemcinin bağlantısı kesildi olarak işaretlenmesi bu zaman aşımı aralığından daha uzun sürebilir. Önerilen değer, değerin iki katıdır KeepAliveInterval . |
HandshakeTimeout |
15 saniye | İstemci bu zaman aralığı içinde ilk el sıkışma iletisini 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şuyorsa değiştirilmesi gereken 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öndermediyse, bağlantıyı açık tutmak için otomatik olarak bir ping iletisi gönderilir. değiştirirken KeepAliveInterval , istemcideki ServerTimeout veya serverTimeoutInMilliseconds ayarını değiştirin. Önerilen ServerTimeout veya serverTimeoutInMilliseconds değer, değerin iki katıdır 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 |
bir Hub yönteminde bir özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür.true Varsayılan değer, bu özel durum iletilerinin hassas bilgiler içerebileceğindendir false . |
StreamBufferCapacity |
10 |
İstemci karşıya yükleme akışları için arabelleğe alınabilecek en fazla öğe sayısı. Bu sınıra ulaşılırsa, sunucu akış öğelerini işleyene kadar çağrıların işlenmesi engellenir. |
MaximumReceiveMessageSize |
32 KB | Tek bir gelen hub iletisinin boyutu üst sınırı. Değerin artırılması Hizmet reddi (DoS) saldırıları riskini artırabilir. |
MaximumParallelInvocationsPerClient |
1 | Her istemcinin kuyruğa almadan önce paralel olarak çağırabileceği en fazla hub yöntemi sayısı. |
DisableImplicitFromServicesParameters |
false |
Hub yöntemi bağımsız değişkenleri mümkünse DI'den çözümlenir. |
Seçenekleri, içinde arama için bir seçenek temsilcisi AddSignalR
sağlayarak tüm hub'lar Program.cs
için yapılandırılabilir.
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
Tek bir hub için seçenekler, içinde AddSignalR
sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddHubOptionsyapılandırılabilir:
builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
options.EnableDetailedErrors = true;
});
Gelişmiş HTTP yapılandırma seçenekleri
Aktarımlar ve bellek arabelleği yönetimiyle ilgili gelişmiş ayarları yapılandırmak için kullanın HttpConnectionDispatcherOptions
. Bu seçenekler içinde bir temsilci MapHub Program.cs
geçirilerek yapılandırılır.
using Microsoft.AspNetCore.Http.Connections;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chathub", options =>
{
options.Transports =
HttpTransportType.WebSockets |
HttpTransportType.LongPolling;
}
);
app.Run();
Aşağıdaki tabloda, ASP.NET Core'un SignalRgelişmiş HTTP seçeneklerini yapılandırma seçenekleri açıklanmaktadır:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
ApplicationMaxBufferSize |
64 KB | İstemciden alınan ve sunucunun geri baskı uygulamadan önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, sunucunun geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
64 KB | Uygulamanın geri baskıyı gözlemlemeden önce arabelleğe aldığı en fazla bayt sayısı. Bu değerin artırılması, sunucunun geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
AuthorizationData |
Hub sınıfına Authorize uygulanan özniteliklerden otomatik olarak toplanan veriler. |
İstemcinin hub'a IAuthorizeData bağlanma yetkisi olup olmadığını belirlemek için kullanılan nesnelerin listesi. |
Transports |
Tüm Aktarımlar etkinleştirilir. | Bit, bir istemcinin HttpTransportType bağlanmak için kullanabileceği aktarımları kısıtlayan değerlerin sabit listesi olarak işaret eder. |
LongPolling |
Aşağıya bakın. | Uzun Yoklama aktarımına özgü ek seçenekler. |
WebSockets |
Aşağıya bakın. | WebSockets aktarımına ö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ümlere sınırlamak için kullanılır. |
CloseOnAuthenticationExpiration |
yanlış | Bir belirtecin süresi dolduğunda bağlantıları kapatacak kimlik doğrulaması süre sonu izlemeyi etkinleştirmek için bu seçeneği ayarlayın. |
Uzun Yoklama aktarımı, özelliği kullanılarak yapılandırılabilir ek seçeneklere LongPolling
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
PollTimeout |
90 saniye | Sunucunun tek bir yoklama isteğini sonlandırmadan önce istemciye ileti göndermesini beklediği en uzun süre. Bu değerin azaltılması, istemcinin yeni yoklama isteklerini daha sık vermesine neden olur. |
WebSocket aktarım, özelliği kullanılarak yapılandırılabilir ek seçeneklere WebSockets
sahiptir:
Seçenek | Varsayılan Değer | Açıklama |
---|---|---|
CloseTimeout |
5 saniye | Sunucu kapatıldıktan sonra, istemci bu zaman aralığı içinde kapatılamazsa bağlantı sonlandırılır. |
SubProtocolSelector |
null |
Üst bilgiyi özel bir değere ayarlamak Sec-WebSocket-Protocol için kullanılabilecek bir temsilci. Temsilci, istemci tarafından istenen değerleri giriş olarak alır ve istenen değeri döndürmesi beklenir. |
İstemci seçeneklerini yapılandırma
İstemci seçenekleri türüne göre HubConnectionBuilder
yapılandırılabilir (.NET ve JavaScript istemcilerinde kullanılabilir). Java istemcisinde de kullanılabilir, ancak HttpHubConnectionBuilder
oluşturucu yapılandırma seçeneklerinin yanı sıra HubConnection
kendisinde de alt sınıf bulunur.
Günlük kaydetmeyi yapılandırma
Günlüğe kaydetme yöntemi kullanılarak .NET İstemcisi'nde ConfigureLogging
yapılandırılır. Günlüğe kaydetme sağlayıcıları ve filtreler, sunucudaki gibi kaydedilebilir. Daha fazla bilgi için ASP.NET Core'da oturum açma belgelerine bakın.
Not
Günlük sağlayıcılarını kaydetmek için gerekli paketleri yüklemeniz gerekir. Tam liste için belgelerin 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 paketini yükleyin Microsoft.Extensions.Logging.Console
. Uzantı yöntemini çağırın AddConsole
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/chathub")
.ConfigureLogging(logging => {
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.Build();
JavaScript istemcisinde benzer configureLogging
bir yöntem vardır. Üretilmesi gereken günlük iletilerinin en düşük düzeyini gösteren bir LogLevel
değer sağlayın. Günlükler tarayıcı konsolu penceresine yazılır.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(signalR.LogLevel.Information)
.build();
LogLevel
Bir değer yerine, günlük düzeyi adını temsil eden bir string
değer de sağlayabilirsiniz. Sabitlere erişiminiz olmayan ortamlarda günlüğe kaydetmeyi LogLevel
yapılandırırken SignalR bu yararlı olur.
let connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging("warn")
.build();
Aşağıdaki tablo kullanılabilir günlük düzeylerini listeler. Sağlamak için sağladığınız değer, günlüğe configureLogging
kaydedilecek en düşük günlük düzeyini ayarlar. Bu düzeyde günlüğe kaydedilen iletiler veya tabloda ondan sonra listelenen düzeyler günlüğe kaydedilir.
String | GünlükDüzeyi |
---|---|
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 yönteminde belirtin signalR.LogLevel.None
configureLogging
.
Günlüğe kaydetme hakkında daha fazla bilgi için Tanılama belgelerine SignalR bakın.
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü 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 aktarımları yapılandırma
tarafından SignalR kullanılan aktarımlar çağrısında WithUrl
(withUrl
JavaScript'te) yapılandırılabilir. bit düzeyinde VEYA değerleri HttpTransportType
, istemciyi yalnızca belirtilen aktarımları kullanacak şekilde kısıtlamak için kullanılabilir. Tüm aktarımlar varsayılan olarak etkindir.
Örneğin, Sunucu Tarafından Gönderilen Olaylar aktarımı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, sağlanan withUrl
seçenekler nesnesindeki transport
alanı olarak ayarlanarak 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ılabilen tek aktarımdır.
Java istemcisinde aktarım, üzerindeki HttpHubConnectionBuilder
yöntemiyle withTransport
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
SignalR Java istemcisi henüz aktarım geri dönüşünü desteklemez.
Taşıyıcı kimlik doğrulamayı yapılandırma
İsteklerle SignalR birlikte kimlik doğrulama verileri sağlamak için seçeneğini (accessTokenFactory
JavaScript'te) kullanarak AccessTokenProvider
istenen erişim belirtecini döndüren bir işlev belirtin. .NET İstemcisi'nde, bu erişim belirteci bir HTTP "Taşıyıcı Kimlik Doğrulaması" belirteci olarak geçirilir (üst bilgi türüyle Bearer
birlikte kullanılırAuthorization
). JavaScript istemcisinde, tarayıcı API'lerinin üst bilgi uygulama özelliğini kısıtladığı birkaç durum dışında erişim belirteci Taşıyıcı belirteci olarak kullanılır (özellikle Sunucu Tarafından Gönderilen Olaylar ve WebSockets isteklerinde). Böyle durumlarda erişim belirteci sorgu dizesi değeri access_token
olarak sağlanır.
.NET istemcisinde seçeneği, AccessTokenProvider
içindeki WithUrl
seçenekler temsilcisi kullanılarak belirtilebilir:
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çindeki seçenekler nesnesinde withUrl
alanı ayarlanarak accessTokenFactory
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 istemcisindeSignalR, HttpHubConnectionBuilder'a erişim belirteci fabrikası sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer ç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ı ve etkin tutma seçeneklerini yapılandırma
Nesnenin kendisinde zaman aşımı ve canlı tutma davranışını yapılandırmaya HubConnection
yönelik ek seçenekler vardır:
Seçenek | Varsayılan değer | Açıklama |
---|---|---|
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ın kesileceğini düşünür ve olayı tetikler Closed (onclose JavaScript'te). Bu değer, bir ping iletisinin sunucudan gönderilmesi ve zaman aşımı aralığı içinde istemci tarafından alınması için yeterince büyük olmalıdır. Önerilen değer, pinglerin gelmesi için zaman tanıyacak şekilde 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öndermezse, istemci el sıkışmayı iptal eder ve olayı tetikler Closed (onclose JavaScript'te). Bu, yalnızca ciddi ağ gecikme süresi nedeniyle el sıkışma zaman aşımı hataları oluşuyorsa değiştirilmesi gereken 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 iletileri gönderdiği aralığı belirler. İstemciden herhangi bir ileti göndererek zamanlayıcıyı aralığın başlangıcına sıfırlar. İstemci sunucudaki kümede ClientTimeoutInterval bir ileti göndermediyse, sunucu istemcinin bağlantısının kesileceğini düşünür. |
.NET İstemcisi'nde zaman aşımı değerleri değer olarak TimeSpan
belirtilir.
Ek seçenekleri yapılandırma
Java istemcisindeki çeşitli yapılandırma API'lerinde WithUrl
HttpHubConnectionBuilder
(withUrl
JavaScript'te) yönteminde HubConnectionBuilder
ek seçenekler yapılandırılabilir:
.NET Seçeneği | Varsayılan değer | Açıklama |
---|---|---|
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ı atlamak için bunu true olarak ayarlayın. Yalnızca WebSockets aktarımı etkinleştirilen tek aktarım olduğunda desteklenir. Azure SignalR Hizmeti kullanılırken bu ayar etkinleştirilemiyor. |
ClientCertificates |
Boş | İsteklerin kimliğini doğrulamak için gönderilecek TLS sertifikaları koleksiyonu. |
Cookies |
Boş | Her HTTP isteğiyle gönderilecek HTTP tanımlama bilgileri koleksiyonu. |
Credentials |
Boş | Her HTTP isteğiyle gönderilecek kimlik bilgileri. |
CloseTimeout |
5 saniye | Yalnızca WebSockets. İstemcinin kapatma isteğini kabul etmek için sunucunun kapatılmasını beklediği en uzun süre. Sunucu bu süre içinde kapanışı kabul etmezse istemcinin bağlantısı kesilir. |
Headers |
Boş | Her HTTP isteğiyle gönderilecek ek HTTP üst bilgilerinin haritası. |
HttpMessageHandlerFactory |
null |
HTTP istekleri göndermek için kullanılan öğesini HttpMessageHandler yapılandırmak veya değiştirmek için kullanılabilecek bir temsilci. WebSocket bağlantıları için kullanılmaz. Bu temsilci null olmayan bir değer döndürmelidir ve varsayılan değeri parametre olarak alır. Bu varsayılan değerdeki ayarları değiştirip döndür ya da yeni HttpMessageHandler bir örnek döndür. İşleyiciyi değiştirirken, sağlanan işleyiciden saklamak istediğiniz ayarları kopyaladığınızdan emin olun; aksi takdirde, yapılandırılan seçenekler (Tanımlama Bilgileri ve Üst Bilgiler gibi) yeni işleyiciye uygulanmaz. |
Proxy |
null |
HTTP istekleri gönderirken kullanılacak bir HTTP proxy'si. |
UseDefaultCredentials |
false |
Bu boole değerini HTTP ve WebSockets istekleri için varsayılan kimlik bilgilerini gönderecek şekilde ayarlayın. Bu, Windows kimlik doğrulamasının kullanılmasını sağlar. |
WebSocketConfiguration |
null |
Ek WebSocket seçeneklerini yapılandırmak için kullanılabilecek bir temsilci. Seçenekleri yapılandırmak için kullanılabilecek bir örneğini ClientWebSocketOptions alır. |
ApplicationMaxBufferSize |
1 MB | İstemcinin geri baskı uygulamadan önce sunucudan aldığı maksimum bayt sayısı. Bu değerin artırılması, istemcinin geri baskı uygulamadan daha büyük iletileri daha hızlı almasını sağlar, ancak bellek tüketimini artırabilir. |
TransportMaxBufferSize |
1 MB | kullanıcı uygulaması tarafından gönderilen ve istemcinin geri baskıyı gözlemlemeden önce arabelleğe aldığı bayt sayısı üst sınırı. Bu değerin artırılması, istemcinin geri baskıyı beklemeden daha büyük iletileri daha hızlı arabelleğe almasına olanak tanır, ancak bellek tüketimini artırabilir. |
.NET İstemcisi'nde, bu seçenekler için sağlanan WithUrl
seçenekler temsilcisi tarafından 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'nde, bu seçenekler için withUrl
sağlanan bir JavaScript nesnesinde sağlanabilir:
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
ASP.NET Core