Asosiy mundarijaga
Hujjatlar .NET ASP. NET 4.x
Ushbu matnni qisman mashinani tarjima qilish orqali tarjima qilish mumkin.
ASP.NET Core uchun SignalR-dagi uyadan foydalanish
01/16/2020
O'qish uchun 6 daqiqa
Ushbu maqolada
SignalR uyasi nima
SignalR uyalarini sozlash
Uyalar yaratish va ulardan foydalanish
Kontekst ob'ekti
Mijozlar ob'ekti
Mijozlarga xabarlar yuborish
Qattiq yozilgan uyalar
Hub usuli nomini o'zgartiring
Ulanish uchun tadbirlarni boshqarish
Xato qilish
Tegishli manbalar
Reychel Appel ( va Kevin Griffin)
Namunaviy kodni ko'rish yoki yuklab olish (Yuklab olish)
SignalR uyasi nima
SignalR konsentratori API sizga serverdan ulangan mijozlarga qo'ng'iroqlarni amalga oshirishga imkon beradi. Server kodi mijoz tomonidan chaqiriladigan usullarni belgilaydi. Mijoz kodi serverdan chaqiriladigan usullarni belgilaydi. Pardaning orqasida mijoz va server o'rtasida real vaqt rejimida ma'lumot almashish imkoniyatini yaratadigan barcha narsalar mavjud.
SignalR uyalarini sozlash
SignalR-ning o'rta dasturi services.AddSignalRchaqiruv orqali sozlangan ba'zi xizmatlarni talab qiladi .
C #
Nusxalash
services.AddSignalR();
SignalR funktsiyalarini ASP.NET Core dasturiga qo'shganda, endpoint.MapHub Startup.Configureusulni chaqirish orqali qo'ng'iroq qilib SignalR yo'nalishlarini sozlang app.UseEndpoints.
C #
Nusxalash
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub("/chathub");
});
Uyalar yaratish va ulardan foydalanish
O'zidan meros qolgan sinf haqida e'lon qilish orqali markaz yarating Hubva unga xalq usullarini qo'shing. Mijozlar belgilangan usullarga qo'ng'iroq qilishlari mumkin . public
C #
Nusxalash
public class ChatHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Siz har qanday C # usulidagi kabi qaytish turi va parametrlarini, shu jumladan murakkab turlar va qatorlarni ko'rsatishingiz mumkin. SignalR parametr va qaytish qiymatlaridagi murakkab ob'ektlar va massivlarni seriyalashtirish va deserializatsiyalash bilan shug'ullanadi.
Eslatma
Uyalar vaqtincha:
Hub sinfidagi mulkda davlatni saqlamang. Har bir uyali usul yangi qo'ng'iroq namunasi uchun amalga oshiriladi.
Ishlatilgan awaitHub-qaram mos kelmaydigan, usullari baþlatýrken. Masalan, usul chaqirilmasa muvaffaqiyatsiz bo'lishi mumkin va hub usuli tugatilishidan oldin tugaydi . Clients.All.SendAsync(...)awaitSendAsync
Kontekst ob'ekti
HubBu sinf Contextulanish ma'lumotlari bilan quyidagi xususiyatlarni o'z ichiga olgan xususiyatga ega:
1-JADVAL
Mulk. Ta'rif:
ConnectionId SignalR tomonidan tayinlangan noyob ulanish identifikatorini qaytaradi. Har bir ulanish uchun bitta ulanish identifikatori mavjud.
UserIdentifier Bosdi foydalanuvchi id . Sukut bo'yicha SignalR foydalanadi dan foydalanuvchi ID sifatida ulanish-tegishli biri. ClaimTypes.NameIdentifierClaimsPrincipal
User ClaimsPrincipalJoriy foydalanuvchi bilan bog'langan ob'ektni oladi .
Items Ushbu ulanish doirasidagi ma'lumotlarni almashish uchun ishlatilishi mumkin bo'lgan kalit qiymat to'plamini qaytaradi. Ma'lumotlar ushbu to'plamda saqlanishi mumkin va hub usuliga turli xil qo'ng'iroqlar orqali ulanish uchun saqlanadi.
Features Aloqada mavjud bo'lgan funktsiyalar to'plamini oladi. Endi ushbu to'plam ko'pgina stsenariylarda talab qilinmaydi, shuning uchun u hali hujjatlashtirilmagan.
ConnectionAborted Ulanish to'g'risida bildirishnoma CancellationTokenyuboradi.
Hub.Contextshuningdek quyidagi usullarni o'z ichiga oladi.
2-JADVAL
Usul Ta'rif
GetHttpContext Agar ulanish HTTP so'rovi bilan bog'liq bo'lmasa HttpContextyoki ulanish uchun qaytadi null. HTTP ulanishlarida bu usul HTTP sarlavhalari va so'rov satrlari kabi ma'lumotlarni olish uchun ishlatilishi mumkin.
Abort Ulanishni to'xtatadi.
Mijozlar ob'ekti
HubSinf Clientsserver va mijoz o'rtasida ma'lumot almashish uchun quyidagi xususiyatlarni o'z ichiga olgan xususiyatga ega:
3-JADVAL
Mulk. Ta'rif:
All Barcha ulangan mijozlar uchun usul chaqiradi.
Caller Hub usuli deb nomlangan mijoz uchun usul chaqiradi
Others Usulni chaqirgan mijozdan tashqari barcha ulangan mijozlar uchun usulni chaqiradi
Hub.Clientsshuningdek quyidagi usullarni o'z ichiga oladi.
4-JADVAL
Usul Ta'rif
AllExcept Belgilangan ulanishlar bundan mustasno barcha ulangan mijozlar uchun usulni chaqiradi.
Client Belgilangan ulangan mijoz uchun usulni chaqiradi
Clients Muayyan ulangan mijozlar uchun usulni chaqiradi.
Group Belgilangan guruhdagi barcha ulanishlar uchun usulni chaqiradi.
GroupExcept Belgilangan aralashmalardan tashqari, belgilangan guruhdagi barcha aralashmalar uchun usulni chaqiradi.
Groups Bir nechta ulanish guruhlari uchun usul chaqiradi
OthersInGroup Hub usuli deb nomlangan mijozdan tashqari, ulanishlar guruhi uchun usul chaqiriladi.
User Muayyan foydalanuvchi bilan bog'liq bo'lgan barcha ulanishlar uchun usulni chaqiradi.
Users Belgilangan foydalanuvchilar bilan bog'liq bo'lgan barcha ulanishlar uchun usulni chaqiradi.
Yuqoridagi jadvallardagi har bir xususiyat yoki usul ob'ektni SendAsyncusul bilan qaytaradi . Usul chaqirilayotgan mijoz usulining nomi va parametrlarini ko'rsatishga imkon beradi. SendAsync
Mijozlarga xabarlar yuborish
Muayyan mijozlarni chaqirish uchun Clientsob'ektning xususiyatlaridan foydalaning . Quyidagi misolda uchta uyali usul mavjud:
SendMessagefoydalanib, barcha ulangan mijozlarga xabar yuboradi Clients.All.
SendMessageToCallerqo'ng'iroq qiluvchiga qayta xabar yuboradi Clients.Caller.
SendMessageToGroupsSignalR UsersGuruhdagi barcha mijozlarga xabar yuboradi .
C #
Nusxalash
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
public Task SendMessageToCaller(string message)
{
return Clients.Caller.SendAsync("ReceiveMessage", message);
}
public Task SendMessageToGroup(string message)
{
return Clients.Group("SignalR Users").SendAsync("ReceiveMessage", message);
}
Qattiq yozilgan uyalar
Uni qo'llashning salbiy tomoni SendAsyncshundaki, u sehrli satrdan foydalanib, mijozni chaqirish usulini ko'rsatadi. Agar usul nomi noto'g'ri yozilgan bo'lsa yoki mijozda yo'q bo'lsa, bu kodni ish vaqtidagi xatolar uchun ochiq qoldiradi.
Foydalanishga alternativa SendAsyncbu Hub Hub ni kuchli yozish . Quyidagi misolda mijoz usullari nomli interfeysga qaytarildi . ChatHubIChatClient
C #
Nusxalash
public interface IChatClient
{
Task ReceiveMessage(string user, string message);
Task ReceiveMessage(string message);
}
Ushbu interfeys avvalgi ChatHubmisolni qayta tuzish uchun ishlatilishi mumkin .
C #
Nusxalash
public class StronglyTypedChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.ReceiveMessage(user, message);
}
public Task SendMessageToCaller(string message)
{
return Clients.Caller.ReceiveMessage(message);
}
}
Foydalanish Hub, kompilyatsiya vaqtida mijozning usullarini tekshirishni o'z ichiga oladi. Bu sehrli iplarni ishlatish bilan bog'liq muammolarni oldini oladi , chunki u faqat interfeysda belgilangan usullardan foydalanishni ta'minlaydi. Hub
Kuchli terilgan Hubkalitdan foydalanish foydalanish imkoniyatini o'chiradi SendAsync. Interfeysda belgilangan barcha usullar baribir asenkron sifatida belgilanishi mumkin. Aslida, ushbu usullarning har biri qaytishi kerak . Bu interfeys bo'lgani uchun, kalit so'zni ishlatmang . Masalan: Task async
C #
Nusxalash
public interface IClient
{
Task ClientMethod();
}
Eslatma
AsyncQo'shimchalar usul nomidan o'chirilmaydi. Agar mijoz usuli yordamida aniqlanmasa , ism sifatida ishlatilmasligi kerak . .on('MyMethodAsync')MyMethodAsync
Hub usuli nomini o'zgartiring
Odatiy bo'lib, server uyasi usulining nomi .NET usulining nomi. Shu bilan birga, ushbu standart qiymatni o'zgartirish va usul nomini qo'lda belgilash uchun siz hubmodname atributidan foydalanishingiz mumkin . Mijoz ushbu usulni chaqirganda .NET usuli nomi o'rniga ushbu ismdan foydalanishi kerak.
C #
Nusxalash
[HubMethodName("SendMessageToUser")]
public Task DirectMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
Ulanish uchun tadbirlarni boshqarish
SignalR Hubs API ulanishlarni boshqarish va kuzatishda virtual OnConnectedAsyncusullarni taqdim etadi OnDisconnectedAsync. Mijoz uyaga ulanganda, masalan, guruhga qo'shilganda, amallarni bajarish uchun virtual usulni bekor qiling . OnConnectedAsync
C #
Nusxalash
public override async Task OnConnectedAsync()
{
await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnConnectedAsync();
}
OnDisconnectedAsyncMijozni uzib qo'yganingizda virtual usulni bekor qiling . Agar mijoz qasddan uzilib qolsa (masalan, qo'ng'iroq qilish orqali), parametr muhimdir. Ammo, agar xato (masalan, tarmoq xatosi) tufayli mijoz uzilib qolsa, parametr ushbu xatoni tavsiflovchi istisnoni o'z ichiga oladi. connection.stop()exception null exception
C #
Nusxalash
public override async Task OnDisconnectedAsync(Exception exception)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnDisconnectedAsync(exception);
}
Ogohlantirish
Xavfsizlik to'g'risida ogohlantirish. Oziq-ovqat mahsulotlari ConnectionId, agar SignalR server yoki ASP.NET Core 2.2 mijoz versiyasi yoki avvalgi zararli Taqlid olib kelishi mumkin.
Xato qilish
Hub usulida tashlangan istisnolar ushbu usul deb nomlangan mijozga yuboriladi. JavaScript mijozida usul JavaScript va'dasini qaytaradi . Mijoz xato haqidagi xabarni va'da qilingan ishlov beruvchisi bilan birga olganida , u chaqiriladi va JavaScript ob'ekti sifatida uzatiladi . invoke catchError
Javascript
Nusxalash
connection.invoke("SendMessage", user, message).catch(err => console.error(err));
Agar uyadan istisno bo'lsa, ulanishlar yopilmaydi. Odatiy bo'lib, SignalR mijozga xato haqida xabar beradi. Masalan:
Nusxalash
Microsoft.AspNetCore.SignalR.HubException: An unexpected error occurred invoking 'MethodName' on the server.
Kutilmagan istisnolar, odatda, ma'lumotlar bazasiga ulanish uzilib qolganda ishga tushadigan istisno holatida ma'lumotlar bazasi serverining nomi kabi nozik ma'lumotlarni o'z ichiga oladi. SignalR xavfsizlik chorasi sifatida ushbu batafsil xato xabarlarini taqdim etmaydi. Istisno to'g'risidagi ma'lumot nima uchun berkitilishi haqida ko'proq ma'lumot olish uchun Xavfsizlik choralariga qarang .
Mijozga uzatilishi kerak bo'lgan alohida shartlar mavjud bo'lsa , siz HubExceptionsinfdan foydalanishingiz mumkin . Agar siz hub usulidan SignalR-ni chiqarsangiz , u mijozga butun xabarni o'zgarishsiz yuboradi . HubException
C #
Nusxalash
public Task ThrowException()
{
throw new HubException("This error will be sent to the client!");
}
Eslatma
SignalR mijozga Messageistisno mulkni yuboradi . Mijozlarni stacking va boshqa istisno xususiyatlari mavjud emas.
Tegishli manbalar
ASP.NET CoreSignalR-ga kirish
JavaScript mijozi
Azure-da nashr eting
Ushbu sahifadagi ma'lumotlar yordam berdimi?
Ha Yo'q
qayta aloqa
Fikrlaringizni quyidagilarga yuboring:
Shuningdek, siz to'g'ridan-to'g'ri GitHub-da fikrlaringizni qoldirishingiz mumkin.
Ushbu hujjat uchun hali sharhlar yo'q. Ushbu sahifadagi sharhlar bu erda ko'rsatiladi.
Rus
Oldingi versiya hujjatlari Blog Yakunlash Maxfiylik va cookie fayllari Foydalanish shartlari Sayt sharhlari Savdo belgilari © Microsoft 2020
Do'stlaringiz bilan baham: |