ile ASP.NET Core kullanma SignalRBlazor
Bu öğretici ile kullanarak gerçek zamanlı bir uygulama oluşturma hakkında temel bilgileri öğretir SignalR Blazor . Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:
- Proje oluşturma Blazor
- SignalRİstemci kitaplığını ekleme
- Hub ekleme SignalR
- SignalRHub için hizmetler ve uç nokta ekleme SignalR
- RazorSohbet için bileşen kodu ekle
Bu öğreticinin sonunda, çalışan bir sohbet uygulamanız olacaktır.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Önkoşullar
- ASP.NET ve web geliştirme iş yüküyle Visual Studio 2022 veya üzeri
- .NET 6,0 SDK
Barındırılan uygulama oluşturma Blazor WebAssembly
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 2022 veya üzeri ve .NET Core SDK 6.0.0 veya üzeri gereklidir.
Yeni bir proje oluşturma.
Blazor WebAssembly Uygulama şablonunu seçin. İleri’yi seçin.
BlazorWebAssemblySignalRAppProject adı alanına yazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum belirtin. İleri’yi seçin.ek bilgi iletişim kutusunda ASP.NET Core barındırılan onay kutusunu seçin.
Oluştur’u seçin.
SignalRİstemci kitaplığını ekleme
Çözüm Gezgini, projeye sağ tıklayın
BlazorWebAssemblySignalRApp.Clientve NuGet paketlerini yönet' i seçin.NuGet paketlerini yönet iletişim kutusunda, paket kaynağının olarak ayarlandığını doğrulayın
nuget.org.Araştır seçiliyken,
Microsoft.AspNetCore.SignalR.ClientArama kutusuna yazın.Arama sonuçlarında
Microsoft.AspNetCore.SignalR.Clientpaketi seçin. Sürümü, uygulamanın paylaşılan çerçevesiyle eşleşecek şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam' ı seçin.
Lisans kabulü iletişim kutusu görüntülenirse, lisans şartlarını kabul ediyorsanız kabul ediyorum ' u seçin.
Hub ekleme SignalR
BlazorWebAssemblySignalRApp.ServerProjesinde, bir Hubs (plural) klasörü oluşturun ve aşağıdaki ChatHub sınıfı ( Hubs/ChatHub.cs ) ekleyin:
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorWebAssemblySignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmetler ve uç nokta ekleme SignalR
BlazorWebAssemblySignalRApp.ServerProjedeProgram.csdosyasını açın.Sınıfın ad alanını
ChatHubdosyanın en üstüne ekleyin:using BlazorWebAssemblySignalRApp.Server.Hubs;SignalRSıkıştırma ara yazılım hizmetlerini ekleme ve yanıtlama
Program.cs:builder.Services.AddSignalR(); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); builder.Services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); });Program.csiçinde:- İşlem ardışık düzeninin yapılandırmasının en üstünde yanıt sıkıştırma ara yazılımı ' nı kullanın.
- Denetleyiciler ve istemci tarafı geri dönüş uç noktaları arasında merkez için bir uç nokta ekleyin.
app.UseResponseCompression(); if (app.Environment.IsDevelopment()) { app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.MapControllers(); app.MapHub<ChatHub>("/chathub"); app.MapFallbackToFile("index.html"); app.Run();
RazorSohbet için bileşen kodu ekle
BlazorWebAssemblySignalRApp.ClientProjedePages/Index.razordosyasını açın.İşaretlemeyi aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IAsyncDisposable <PageTitle>Index</PageTitle> <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection? hubConnection; private List<string> messages = new List<string>(); private string? userInput; private string? messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } private async Task Send() { if (hubConnection is not null) { await hubConnection.SendAsync("SendMessage", userInput, messageInput); } } public bool IsConnected => hubConnection?.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { if (hubConnection is not null) { await hubConnection.DisposeAsync(); } } }
Uygulamayı çalıştırma
Araç kılavuzunuz için yönergeleri izleyin:
Bu Çözüm Gezgini projesini
BlazorWebAssemblySignalRApp.Serverseçin. Uygulamayı hata ayıklama ile çalıştırmak için F5'e veya hata ayıklama olmadan çalıştırmak için Ctrl + F5'e basın.Adres çubuğundan URL'yi kopyalayın, başka bir tarayıcı örneği veya sekmesi açın ve URL'yi adres çubuğuna yapıştırın.
Tarayıcıdan birini seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: Star Tipi VI: Keşfedilmemiş Ülke © 1991 Paramount
Uygulama Blazor Server oluşturma
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 2022 veya sonraki bir .NET Core SDK 6.0.0 veya sonrası gerekir.
Yeni bir proje oluşturma.
Uygulama Blazor Server şablonunu seçin. İleri’yi seçin.
Project
BlazorServerSignalRAppyazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum girin. İleri’yi seçin.Oluştur’u seçin.
İstemci SignalR kitaplığını ekleme
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paket
BlazorServerSignalRAppYönetimi'NuGet seçin.Paket Yönetimi NuGet iletişim kutusunda Paket kaynağının olarak ayar olduğunu
nuget.orgonaylayın.Gözat seçiliyken
Microsoft.AspNetCore.SignalR.Clientarama kutusuna yazın.Arama sonuçlarında paketi
Microsoft.AspNetCore.SignalR.Clientseçin. Sürümü uygulamanın paylaşılan çerçevesiyle eş olacak şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam'ı seçin.
Lisans Kabulü iletişim kutusu açılırsa, lisans koşullarını kabul ediyorsanız Kabul Ediyorum'a tıklayın.
Hub SignalR ekleme
Bir Hubs (çoğul) klasör oluşturun ve aşağıdaki sınıfı ChatHub ekleyin ( Hubs/ChatHub.cs ):
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorServerSignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmet ve uç nokta SignalR ekleme
Program.csdosyasını açın.ve sınıfını Microsoft.AspNetCore.ResponseCompression
ChatHubdosyanın en üstüne ad alanları ekleyin:using Microsoft.AspNetCore.ResponseCompression; using BlazorServerSignalRApp.Server.Hubs;hizmetine Yanıt Sıkıştırma Ara Yazılımı hizmetleri
Program.csekleyin:builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton<WeatherForecastService>(); builder.Services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); });Program.csiçinde:- İşlem hattı yapılandırmasının üst kısmında Yanıt Sıkıştırma Ara Yazılımı'nın kullanın.
- Hub'ı eşleme uç noktaları ile istemci tarafı geri dönüşleri arasında Blazor hub için bir uç nokta ekleyin.
app.UseResponseCompression(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.MapBlazorHub(); app.MapHub<ChatHub>("/chathub"); app.MapFallbackToPage("/_Host"); app.Run();
RazorSohbet için bileşen kodu ekle
Pages/Index.razordosyasını açın.İşaretlemeyi aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IAsyncDisposable <PageTitle>Index</PageTitle> <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection? hubConnection; private List<string> messages = new List<string>(); private string? userInput; private string? messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } private async Task Send() { if (hubConnection is not null) { await hubConnection.SendAsync("SendMessage", userInput, messageInput); } } public bool IsConnected => hubConnection?.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { if (hubConnection is not null) { await hubConnection.DisposeAsync(); } } }
Uygulamayı çalıştırma
Araç kılavuzunuz için yönergeleri izleyin:
Uygulamayı hata ayıklama olmadan çalıştırmak için F5 tuşuna basın veya uygulamayı hata ayıklamadan çalıştırmak için CTRL + F5 tuşuna basın.
Adres çubuğundan URL 'yi kopyalayın, başka bir tarayıcı örneği veya sekme açın ve adres çubuğuna URL 'YI yapıştırın.
Tarayıcı ' yı seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: yıldız Trek VI: bulunan ülke © 1991 Paramount
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Proje oluşturma Blazor
- SignalRİstemci kitaplığını ekleme
- Hub ekleme SignalR
- SignalRHub için hizmetler ve uç nokta ekleme SignalR
- RazorSohbet için bileşen kodu ekle
Uygulama oluşturma hakkında daha fazla bilgi edinmek için Blazor Blazor belgelere bakın:
ASP.NET Core giriş Blazor IdentitySunucu, WebSockets ve Server-Sent olayları ile taşıyıcı belirteci kimlik doğrulaması
Ek kaynaklar
Bu öğretici ile kullanarak gerçek zamanlı bir uygulama oluşturma hakkında temel bilgileri öğretir SignalR Blazor . Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:
- Proje oluşturma Blazor
- SignalRİstemci kitaplığını ekleme
- Hub ekleme SignalR
- SignalRHub için hizmetler ve uç nokta ekleme SignalR
- RazorSohbet için bileşen kodu ekle
Bu öğreticinin sonunda, çalışan bir sohbet uygulamanız olacaktır.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Önkoşullar
- ASP.NET ve web geliştirme iş yüküyle Visual Studio 2019 16,10 veya üzeri
- .NET 5.0 SDK
Barındırılan uygulama oluşturma Blazor WebAssembly
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 16,10 veya üzeri ve .NET Core SDK 5.0.0 veya üzeri gerekiyor.
Yeni bir proje oluşturma.
Blazor WebAssembly Uygulama şablonunu seçin. İleri’yi seçin.
BlazorWebAssemblySignalRAppProject adı alanına yazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum belirtin. İleri’yi seçin.ek bilgi iletişim kutusunda ASP.NET Core barındırılan onay kutusunu seçin.
Oluştur’u seçin.
İstemci SignalR kitaplığını ekleme
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paketleri
BlazorWebAssemblySignalRApp.ClientYönet'NuGet seçin.Paket Paketlerini NuGet iletişim kutusunda Paket kaynağının olarak ayar olduğunu
nuget.orgonaylayın.Gözat seçiliyken
Microsoft.AspNetCore.SignalR.Clientarama kutusuna yazın.Arama sonuçlarında paketi
Microsoft.AspNetCore.SignalR.Clientseçin. Sürümü uygulamanın paylaşılan çerçevesiyle eş olacak şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam'ı seçin.
Lisans Kabulü iletişim kutusu açılırsa, lisans koşullarını kabul ediyorsanız Kabul Ediyorum'a tıklayın.
Hub SignalR ekleme
Projede BlazorWebAssemblySignalRApp.Server bir Hubs (çoğul) klasör oluşturun ve aşağıdaki sınıfı ChatHub ekleyin ( Hubs/ChatHub.cs ):
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorWebAssemblySignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmet ve uç nokta SignalR ekleme
Projesinde
BlazorWebAssemblySignalRApp.ServerdosyasınıStartup.csaçın.sınıfının ad alanını
ChatHubdosyanın en üstüne ekleyin:using BlazorWebAssemblySignalRApp.Server.Hubs;hizmetine SignalR Sıkıştırma Ara Yazılımı hizmetleri ekleme ve
Startup.ConfigureServicesyanıtlama:public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddControllersWithViews(); services.AddRazorPages(); services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); }); }Startup.Configureiçinde:- İşlem hattı yapılandırmasının üst kısmında Yanıt Sıkıştırma Ara Yazılımı'nın kullanın.
- Denetleyiciler ve istemci tarafı geri dönüş uç noktaları arasında hub için bir uç nokta ekleyin.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCompression(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllers(); endpoints.MapHub<ChatHub>("/chathub"); endpoints.MapFallbackToFile("index.html"); }); }
Sohbet Razor için bileşen kodu ekleme
Projesinde
BlazorWebAssemblySignalRApp.ClientdosyasınıPages/Index.razoraçın.işaretlemesini aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IAsyncDisposable <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection hubConnection; private List<string> messages = new List<string>(); private string userInput; private string messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } async Task Send() => await hubConnection.SendAsync("SendMessage", userInput, messageInput); public bool IsConnected => hubConnection.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { if (hubConnection is not null) { await hubConnection.DisposeAsync(); } } }
Uygulamayı çalıştırma
Aracınız için yönergeleri izleyin:
Bu Çözüm Gezgini projesini
BlazorWebAssemblySignalRApp.Serverseçin. Uygulamayı hata ayıklama ile çalıştırmak için F5'e veya hata ayıklama olmadan çalıştırmak için Ctrl + F5'e basın.Adres çubuğundan URL'yi kopyalayın, başka bir tarayıcı örneği veya sekmesi açın ve URL'yi adres çubuğuna yapıştırın.
Tarayıcıdan birini seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: Star Tipi VI: Keşfedilmemiş Ülke © 1991 Paramount
Uygulama Blazor Server oluşturma
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 16.10 veya sonraki bir .NET Core SDK 5.0.0 veya sonrası gerekir.
Yeni bir proje oluşturma.
Uygulama Blazor Server şablonunu seçin. İleri’yi seçin.
Project
BlazorServerSignalRAppyazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum girin. İleri’yi seçin.Oluştur’u seçin.
SignalRİstemci kitaplığını ekleme
Çözüm Gezgini, projeye sağ tıklayın
BlazorServerSignalRAppve NuGet paketlerini yönet' i seçin.NuGet paketlerini yönet iletişim kutusunda, paket kaynağının olarak ayarlandığını doğrulayın
nuget.org.Araştır seçiliyken,
Microsoft.AspNetCore.SignalR.ClientArama kutusuna yazın.Arama sonuçlarında
Microsoft.AspNetCore.SignalR.Clientpaketi seçin. Sürümü, uygulamanın paylaşılan çerçevesiyle eşleşecek şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam' ı seçin.
Lisans kabulü iletişim kutusu görüntülenirse, lisans şartlarını kabul ediyorsanız kabul ediyorum ' u seçin.
Hub ekleme SignalR
Hubs(Plural) bir klasör oluşturun ve şu ChatHub sınıfı () ekleyin Hubs/ChatHub.cs :
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorServerSignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmetler ve uç nokta ekleme SignalR
Startup.csdosyasını açın.Ve sınıfının ad alanlarını Microsoft.AspNetCore.ResponseCompression
ChatHubdosyanın en üstüne ekleyin:using Microsoft.AspNetCore.ResponseCompression; using BlazorServerSignalRApp.Server.Hubs;Yanıt sıkıştırma ara yazılım hizmetlerini şu şekilde ekleyin
Startup.ConfigureServices:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); services.AddSingleton<WeatherForecastService>(); services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); }); }Startup.Configureiçinde:- İşlem ardışık düzeninin yapılandırmasının en üstünde yanıt sıkıştırma ara yazılımı ' nı kullanın.
- BlazorHub ve istemci tarafı geri dönüşü eşlemek için uç noktalar arasında merkez için bir uç nokta ekleyin.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCompression(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); endpoints.MapHub<ChatHub>("/chathub"); endpoints.MapFallbackToPage("/_Host"); }); }
RazorSohbet için bileşen kodu ekle
Pages/Index.razordosyasını açın.İşaretlemeyi aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IAsyncDisposable <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection hubConnection; private List<string> messages = new List<string>(); private string userInput; private string messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } async Task Send() => await hubConnection.SendAsync("SendMessage", userInput, messageInput); public bool IsConnected => hubConnection.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { if (hubConnection is not null) { await hubConnection.DisposeAsync(); } } }
Uygulamayı çalıştırma
Araç kılavuzunuz için yönergeleri izleyin:
Uygulamayı hata ayıklama olmadan çalıştırmak için F5 tuşuna basın veya uygulamayı hata ayıklamadan çalıştırmak için CTRL + F5 tuşuna basın.
Adres çubuğundan URL 'yi kopyalayın, başka bir tarayıcı örneği veya sekme açın ve adres çubuğuna URL 'YI yapıştırın.
Tarayıcı ' yı seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: yıldız Trek VI: bulunan ülke © 1991 Paramount
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Proje oluşturma Blazor
- SignalRİstemci kitaplığını ekleme
- Hub ekleme SignalR
- SignalRHub için hizmetler ve uç nokta ekleme SignalR
- RazorSohbet için bileşen kodu ekle
Uygulama oluşturma hakkında daha fazla bilgi edinmek için Blazor Blazor belgelere bakın:
ASP.NET Core giriş Blazor IdentitySunucu, WebSockets ve Server-Sent olayları ile taşıyıcı belirteci kimlik doğrulaması
Ek kaynaklar
Bu öğretici ile kullanarak gerçek zamanlı bir uygulama oluşturma hakkında temel bilgileri öğretir SignalR Blazor . Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:
- Proje oluşturma Blazor
- SignalRİstemci kitaplığını ekleme
- Hub ekleme SignalR
- SignalRHub için hizmetler ve uç nokta ekleme SignalR
- RazorSohbet için bileşen kodu ekle
Bu öğreticinin sonunda, çalışan bir sohbet uygulamanız olacaktır.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Önkoşullar
- ASP.NET ve web geliştirme iş yüküyle Visual Studio 2019 16,6 veya üzeri
- .NET Core 3,1 SDK
Barındırılan uygulama Blazor WebAssembly oluşturma
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 16.6 veya sonraki bir .NET Core SDK 3.1.300 veya sonraki bir yıl gereklidir.
Yeni bir proje oluşturma.
Uygulama Blazor WebAssembly şablonunu seçin. İleri’yi seçin.
Ad
BlazorWebAssemblySignalRAppalanına Project yazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum girin. İleri’yi seçin.Ek bilgiler iletişim kutusunda, Barındırılan ASP.NET Core onay kutusunu seçin.
Oluştur’u seçin.
İstemci SignalR kitaplığını ekleme
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paketleri
BlazorWebAssemblySignalRApp.ClientYönet'NuGet seçin.Paket Paketlerini NuGet iletişim kutusunda Paket kaynağının olarak ayar olduğunu
nuget.orgonaylayın.Gözat seçiliyken
Microsoft.AspNetCore.SignalR.Clientarama kutusuna yazın.Arama sonuçlarında paketi
Microsoft.AspNetCore.SignalR.Clientseçin. Sürümü uygulamanın paylaşılan çerçevesiyle eş olacak şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam'ı seçin.
Lisans Kabulü iletişim kutusu açılırsa, lisans koşullarını kabul ediyorsanız Kabul Ediyorum'a tıklayın.
Hub SignalR ekleme
Projede BlazorWebAssemblySignalRApp.Server bir Hubs (çoğul) klasör oluşturun ve aşağıdaki sınıfı ChatHub ekleyin ( Hubs/ChatHub.cs ):
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorWebAssemblySignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmet ve uç nokta SignalR ekleme
Projesinde
BlazorWebAssemblySignalRApp.ServerdosyasınıStartup.csaçın.sınıfının ad alanını
ChatHubdosyanın en üstüne ekleyin:using BlazorWebAssemblySignalRApp.Server.Hubs;hizmetine SignalR Sıkıştırma Ara Yazılımı hizmetleri ekleme ve
Startup.ConfigureServicesyanıtlama:public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddControllersWithViews(); services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); }); }Startup.Configureiçinde:- İşlem hattı yapılandırmasının üst kısmında Yanıt Sıkıştırma Ara Yazılımı'nın kullanın.
- Denetleyiciler ve istemci tarafı geri dönüş uç noktaları arasında hub için bir uç nokta ekleyin.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCompression(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapHub<ChatHub>("/chathub"); endpoints.MapFallbackToFile("index.html"); }); }
Sohbet Razor için bileşen kodu ekleme
Projesinde
BlazorWebAssemblySignalRApp.ClientdosyasınıPages/Index.razoraçın.işaretlemesini aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IDisposable <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection hubConnection; private List<string> messages = new List<string>(); private string userInput; private string messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } async Task Send() => await hubConnection.SendAsync("SendMessage", userInput, messageInput); public bool IsConnected => hubConnection.State == HubConnectionState.Connected; public void Dispose() { _ = hubConnection?.DisposeAsync(); } }
Uygulamayı çalıştırma
Aracınız için yönergeleri izleyin:
Bu Çözüm Gezgini projesini
BlazorWebAssemblySignalRApp.Serverseçin. Uygulamayı hata ayıklama ile çalıştırmak için F5'e veya hata ayıklama olmadan çalıştırmak için Ctrl + F5'e basın.Adres çubuğundan URL'yi kopyalayın, başka bir tarayıcı örneği veya sekmesi açın ve URL'yi adres çubuğuna yapıştırın.
Tarayıcıdan birini seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: Star Tipi VI: Keşfedilmemiş Ülke © 1991 Paramount
Uygulama Blazor Server oluşturma
Araç seçiminiz için yönergeleri izleyin:
Not
Visual Studio 16.6 veya sonraki bir .NET Core SDK 3.1.300 veya sonraki bir yıl gereklidir.
Yeni bir proje oluşturma.
Uygulama Blazor Server şablonunu seçin. İleri’yi seçin.
Ad
BlazorServerSignalRAppalanına Project yazın. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum girin. İleri’yi seçin.Oluştur’u seçin.
İstemci SignalR kitaplığını ekleme
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paketleri
BlazorServerSignalRAppYönet'NuGet seçin.Paket Yönetimi NuGet iletişim kutusunda Paket kaynağının olarak ayar olduğunu
nuget.orgonaylayın.Gözat seçiliyken
Microsoft.AspNetCore.SignalR.Clientarama kutusuna yazın.Arama sonuçlarında paketi
Microsoft.AspNetCore.SignalR.Clientseçin. Sürümü uygulamanın paylaşılan çerçevesiyle eş olacak şekilde ayarlayın. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam'ı seçin.
Lisans Kabulü iletişim kutusu açılırsa, lisans koşullarını kabul ediyorsanız Kabul Ediyorum'a tıklayın.
System.Text.Encodings.Web paketini ekleme
Bu bölüm yalnızca 3.x ASP.NET Core uygulamalar için geçerlidir.
Bir System.Text.Json ASP.NET Core 3.x uygulamasında 5.x kullanırken paket çözümleme sorunu nedeniyle proje için bir paket başvurusu System.Text.Encodings.Web gerektirir. Temel alınan sorun gelecekteki bir .NET 5 düzeltme eki sürümüyle çözülecek. Daha fazla bilgi için bkz. System.Text.Json, bağımlılıkları (dotnet/runtime #45560) ile netcoreapp3.0'ı tanımlar.
Projeye System.Text.Encodings.Web eklemek için, araç seçiminize yönelik yönergeleri izleyin:
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paketleri
BlazorServerSignalRAppYönet'NuGet seçin.Paket Yönetimi NuGet iletişim kutusunda Paket kaynağının olarak ayar olduğunu
nuget.orgonaylayın.Gözat seçiliyken
System.Text.Encodings.Webarama kutusuna yazın.Arama sonuçlarında paketi
System.Text.Encodings.Webseçin. Paketin, kullanımda paylaşılan çerçeveyle eşleşen sürümünü seçin. Yükle'yi seçin.Değişiklikleri Önizle iletişim kutusu görüntülenirse Tamam'ı seçin.
Lisans Kabulü iletişim kutusu açılırsa, lisans koşullarını kabul ediyorsanız Kabul Ediyorum'a tıklayın.
Hub SignalR ekleme
Bir Hubs (çoğul) klasör oluşturun ve aşağıdaki sınıfı ChatHub ekleyin ( Hubs/ChatHub.cs ):
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorServerSignalRApp.Server.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Hub için hizmet ve uç nokta SignalR ekleme
Startup.csdosyasını açın.ve sınıfını Microsoft.AspNetCore.ResponseCompression için ad
ChatHubalanlarını dosyanın en üstüne ekleyin:using Microsoft.AspNetCore.ResponseCompression; using BlazorServerSignalRApp.Server.Hubs;hizmetine Yanıt Sıkıştırma Ara Yazılımı hizmetleri
Startup.ConfigureServicesekleyin:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); services.AddSingleton<WeatherForecastService>(); services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); }); }Startup.Configureiçinde:- İşlem hattı yapılandırmasının üst kısmında Yanıt Sıkıştırma Ara Yazılımı'nın kullanın.
- Hub'ı eşleme uç noktaları ile istemci tarafı geri dönüşleri arasında Blazor hub için bir uç nokta ekleyin.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCompression(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); endpoints.MapHub<ChatHub>("/chathub"); endpoints.MapFallbackToPage("/_Host"); }); }
Sohbet Razor için bileşen kodu ekleme
Pages/Index.razordosyasını açın.işaretlemesini aşağıdaki kodla değiştirin:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager @implements IAsyncDisposable <div class="form-group"> <label> User: <input @bind="userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in messages) { <li>@message</li> } </ul> @code { private HubConnection hubConnection; private List<string> messages = new List<string>(); private string userInput; private string messageInput; protected override async Task OnInitializedAsync() { hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chathub")) .Build(); hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; messages.Add(encodedMsg); StateHasChanged(); }); await hubConnection.StartAsync(); } async Task Send() => await hubConnection.SendAsync("SendMessage", userInput, messageInput); public bool IsConnected => hubConnection.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { await hubConnection?.DisposeAsync(); } }
Uygulamayı çalıştırma
Aracınız için yönergeleri izleyin:
Uygulamayı hata ayıklama ile çalıştırmak için F5'e veya hata ayıklama olmadan çalıştırmak için Ctrl + F5'e basın.
Adres çubuğundan URL'yi kopyalayın, başka bir tarayıcı örneği veya sekmesi açın ve URL'yi adres çubuğuna yapıştırın.
Tarayıcıdan birini seçin, bir ad ve ileti girin ve iletiyi göndermek için düğmeyi seçin. Ad ve ileti her iki sayfada da anında görüntülenir:

Alıntılar: Star Tipi VI: Keşfedilmemiş Ülke © 1991 Paramount
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Proje Blazor oluşturma
- İstemci SignalR kitaplığını ekleme
- Hub SignalR ekleme
- Hub SignalR için hizmet ve uç nokta SignalR ekleme
- Sohbet Razor için bileşen kodu ekleme
Uygulama bina hakkında daha fazla Blazor bilgi edinmek için şu belgelere Blazor bakın:
ASP.NET Core giriş Blazor IdentitySunucu, WebSockets ve Server-Sent Olayları ile taşıyıcı belirteç kimlik doğrulaması