بازخوردهای دوره
بازخوردهای دوره
نگاهی به SignalR Clients
تمرین 1
به پروژه ساده و ابتدایی فوق یک تکست باکس دیگر به نام Room را اضافه کنید؛ به همراه دکمه join. سپس نکات قسمت قبل را در مورد الحاق به یک گروه و سپس ارسال پیام به اعضای گروه را پیاده سازی نمائید. (تمام نکات آن با مطلب فوق پوشش داده شده است و در اینجا باید صرفا فراخوانی متدهای عمومی دیگری در سمت هاب، صورت گیرد)
یک چت گروهی ساده با توجه به مطالب گفته شده
بازخوردهای دوره
نگاهی به SignalR Hubs
یک hub را داخل یک پروژه دیگر از نوع class library قرار دادم و با ارجاع به یک کنسول که selfhost شده، میخواستم ازش استفاده کنم، کار نمیکند. به همین سادگی!
کد hub
[HubName("messageHub")] public class MessageHub : Hub { public void NotifyAllClients() { Clients.All.Notify(); } }
کلاس startup
public partial class Startup { public void Configuration(IAppBuilder appBuilder) { var hubConfiguration = new HubConfiguration() { EnableDetailedErrors = true }; appBuilder.MapSignalR(hubConfiguration); appBuilder.UseCors(CorsOptions.AllowAll); } }
نقطه آغازین برنامه:
static void Main(string[] args) { const string baseAddress = "http://localhost:9000/"; // "http://*:9000/"; using (var webapp = WebApp.Start<Startup>(baseAddress)) { Console.WriteLine("Start app..."); var hubConnection = new HubConnection(baseAddress); IHubProxy messageHubProxy = hubConnection.CreateHubProxy("messageHub"); messageHubProxy.On("notify", () => { Console.WriteLine(); Console.WriteLine("Notified!"); }); hubConnection.Start().Wait(); Console.WriteLine("Start signalr..."); bool dontExit = true; while (dontExit) { var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) dontExit = false; messageHubProxy.Invoke("NotifyAllClients"); } } }
اگر کلاس hub را به داخل پروژهی slefhost منتقل کنم، کار میکند. اما در یک class library دیگر خیر.
نگارش دات نت و ارجاعات همه یکسان است. dotnet 4.5
آیا نکته ای جاانداخته شده در این نمونه کد؟
بازخوردهای دوره
نگاهی به SignalR Hubs
در مطلب نگاهی به گزینههای مختلف مهیای جهت میزبانی SignalR بیشتر بحث شدهاست:
« باید توجه داشت که در این حالت (self hosting) برخلاف روش ASP.NET Hosting، سایر اسمبلیهای برنامه جهت یافتن Hubهای تعریف شده، اسکن نمیشوند »
یک راه حل برای رفع آن، افزودن سطر زیر به ابتدای برنامه است (قبل از شروع هر کد دیگری):
« باید توجه داشت که در این حالت (self hosting) برخلاف روش ASP.NET Hosting، سایر اسمبلیهای برنامه جهت یافتن Hubهای تعریف شده، اسکن نمیشوند »
یک راه حل برای رفع آن، افزودن سطر زیر به ابتدای برنامه است (قبل از شروع هر کد دیگری):
AppDomain.CurrentDomain.Load(typeof(Lib1.MessageHub).Assembly.FullName);
بازخوردهای دوره
نگاهی به SignalR Clients
اگه بخوایم از تو چند تا page به یه هاب وصل بشیم ، connectionIdها مدام عوض میشه. چه راه حلی برای این موضوع وجود داره؟
مثلا شما فرض کنید میخواهید در حین ورود به سیستم لیست یوزرها رو بگیرید ($.connection.hub ) و یه جایی از برنامه میخواهید ورود به چت روم داشته باشید (($.connection.hub ) و به این صورت آیدیها برای یه یوزر دو تا آیدی بوجود میاد ، راه حل شما برای این مسئله چیه ؟
مثلا شما فرض کنید میخواهید در حین ورود به سیستم لیست یوزرها رو بگیرید ($.connection.hub ) و یه جایی از برنامه میخواهید ورود به چت روم داشته باشید (($.connection.hub ) و به این صورت آیدیها برای یه یوزر دو تا آیدی بوجود میاد ، راه حل شما برای این مسئله چیه ؟
بازخوردهای دوره
نگاهی به SignalR Hubs
با سلام و تشکر از آموزشهای روان شما
ممکن است دوستان در استفاده از این آموزش دچار اشکالی شوند که ناشی از بروز رسانی SignalR از ورژن 1 به 2 است.
در ورژنهای جدیدتر SignalR از Owin برای ارتباط خود استفاده میکند بنابراین در صورت استفاده از دستور
RouteTable.Routes.MapHubs();
در Application Start به خطا میخوریم جهت حل این مشکل ابتدا باید یک فایل OwinStartUp.cs به برنامه اضافه شود و به صورت کد زیر SignalR را مپ کنیم:
public void Configuration(IAppBuilder app) { app.MapSignalR(); }
بازخوردهای دوره
نگاهی به SignalR Hubs
ممنون. بله. این مورد در مطلب «نحوهی ارتقاء برنامههای SignalR 1.x به SignalR 2.x» بیشتر بحث شده.
بازخوردهای دوره
نگاهی به SignalR Hubs
نصب کنید خوبه؛ ولی ضروری نیست. با نصب از طریق NuGet فقط اسمبلیهای لازم و فایلهای لازم اضافه میشوند؛ نه قالبهای VS.NET مرتبط. این قالبها هم ضروری نیستند. مثلا یک کلاس Hub چیزی نیست جز یک کلاس ساده (نمونهاش در متن مطلب جاری هست) که از کلاس پایه Hub مشتق میشود (این کلاس رو دستی خودتون ایجاد کنید؛ الزامی نیست که ابزار اینکار را برای شما انجام دهد)
بازخوردهای دوره
نگاهی به SignalR Hubs
من هم همین مشکل را دارم و با نصب NuGet باز هم کلاس SignalR Hub
برای انتخاب در لیست نبود
آیا برای این منظور همه اون آپدیتها که فرمودین لازمه ؟
برای انتخاب در لیست نبود
آیا برای این منظور همه اون آپدیتها که فرمودین لازمه ؟