بازخوردهای دوره
مدیریت نگاشت ConnectionIdها در SignalR به کاربران واقعی سیستم
مطابق مطلب فوق باید ConnectionId‌های او را یافته و به آن‌ها پیام ارسال کنید. روش مدیریت و جمع آوری این ConnectionId‌ها با مثالی در اینجا بحث شده.
به صورت خلاصه باید تناظری را بین مشخصات کاربر لاگین شده به سیستم یا Context.User.Identity.Name و تمام Context.ConnectionId او برقرار کرد.
بعد با داشتن لیستی از
ConnectionId‌های متناظر (ConcurrentDictionary مثال فوق)، می‌توان به کاربر خاصی پیام ارسال کرد. در این دیکشنری، به ازای یک Context.User.Identity.Name (مشخصات کاربر لاگین شده)، لیست Idهای اتصال او موجود است.
بعد برای ارسال پیام
به یک اتصال:
      Clients.Client(someConnectionId).sayhello("....");
ارسال پیام به چند اتصال، یا لیستی از ConnectionId ها:
Clients.Clients(connectionIdsList).sayhello("....");
اشتراک‌ها
تسکولو!

مدیریت پروژه‌ها

تسکولو یکراه حل کاملبرای شروع و مدیریت پروژه‌هاست. به سادگی پروژه، لیست کاری و کار ایجاد و آن‌ها را مدیریت کنید. با اعضای تیم خود لحظه به لحظه در ارتباط باشید و زمان کاری خود را ثبت کنید.

مدیریت تیم

به اعضای تیم خود نقش‌ها و دسترسی‌های مناسب بدهید تا محیط کاری خود را مرتب و کارآمد نگاه دارید و کارایی تیم خود را با قابلیتگفتگوی بی‌درنگبالا ببرید.

سطوح دسترسی

برای مدیریت چیزی که به واقع یک پروژه است چند زیر‌پروژه ایجاد نکنید! با استفاده ازنقش‌های کاربریوفاز‌هابه سادگی دسترسی افراد تیم خود به بخش‌های مختلف پروژه را کنترل کنید. 


تسکولو!
نظرات مطالب
غیرمعتبر شدن کوکی‌های برنامه‌های ASP.NET Core هاست شده‌ی در IIS پس از ری‌استارت آن
- services.AddDataProtection یعنی همان مقدمه‌ی بحث؛ یا ذخیره سازی کلیدها در حافظه به صورت پیش‌فرض. مابقی بحث جهت دائمی کردن این کلیدها است. البته دائمی کردن هم طول عمری دارد.
- در سرورهای اشتراکی یا از روش «یک نکته‌ی تکمیلی: روش ذخیره سازی کلید موقتی تولید شده در بانک اطلاعاتی بجای حافظه‌ی سرور » استفاده کنید، یا با هاست تماس بگیرید و تنظیم گزینه‌ی 2 یا همان Load user profile به true را به آن‌ها اعلام کنید (چون تنظیمات برنامه‌های ASP.NET Core با نگارش‌های قبلی یکی نیست؛ این یک مورد را هم بهتر است به لیست تنظیمات اولیه‌ی برنامه اضافه کنند).
- در حالت سوم، ذکر Certificate برای رمزنگاری اطلاعات ضروری است؛ در غیراینصورت این کلیدها به صورت معمولی و واضح ذخیره خواهند شد.
نظرات مطالب
EF Code First #2
- در SQL Server اگر تنها یک کانکشن باز به دیتابیس مفروضی وجود داشته باشد، امکان drop آن‌را نمی‌دهد. برای مثال اگر همزمان management studio هم باز است، این مورد یعنی یک کانکشن باز. آن‌را ببندید تا SQL Server به این نتیجه برسد که کسی از بانک اطلاعاتی درخواستی در حال استفاده نیست.
- در کل رویه ذخیره شده‌ی سیستمی به نام SP_WHO وجود دارد که مصرف کنندگان را لیست می‌کند. شماره آن‌ها را یافته و سپس توسط رویه ذخیره شده دیگری به نام Kill، حذفشان کنید.
- روش دیگر drop آنی یک بانک اطلاعاتی، تک کاربره کردن و سپس حذف آن است:
 alter database [MyDatbase] set single_user with rollback immediate
 drop database [MyDatabase]
نظرات مطالب
ASP.NET MVC #11
- روش بهینه، استفاده از یک Context در طول درخواست است. در قسمت 12 سری EF به آن پرداخته شده. پیشنیاز آن مطالعه کامل مباحث IoC و تزریق وابستگی‌ها است.
- ViewModel یک روش است. روش‌های لیست سیاه و سفید هم هستند. این موارد هم بیشتر از این جهت معرفی شد‌ه‌اند چون با استفاده از ابزارهایی مانند AutoMapper می‌شود خواص مدل‌ها را خیلی سریع و بدون نوشتن تک تک آن‌ها به یکدیگر نگاشت کرد و یا متد توکار TryUpdateModel سعی می‌کند کل مدل را بر اساس اطلاعات دریافتی از کاربر، به روز رسانی کند.
- به اعتبارسنجی یک قسمت مجزا اختصاص داده شده‌است. جزئیات روش کار خودتان را با آن مقایسه کنید.
نظرات مطالب
مباحث تکمیلی مدل‌های خود ارجاع دهنده در EF Code first
نیازی نیست زیاد پیچیده فکر کنید. یک لیست ساده رو واکشی کنید (مثلا یک کامنت که سه زیر مجموعه مرتبط دارد با یک select ساده)، اتصال نهایی آن‌ها در سمت کلاینت خودکار است. به عبارتی شکل دهی تو در تو در اینجا در سمت کلاینت انجام می‌شود و نه سمت سرور. سمت سرور آن، یک select معمولی از رکوردهای مورد نظر بیشتر نیست.
var specifiedCommentId = 4; //عدد 4 در اینجا شماره رکورد کامنتی است که دارای یک سری زیر کامنت است
var list = ctx.BlogComments
                 .Include(x => x.Reply)
                 .Where(x => x.Id >= specifiedCommentId && (x.ReplyId == x.Reply.Id || x.Reply == null))
                 .ToList() // fills the childs list too
                 .Where(x => x.Reply == null) // for TreeViewHelper                        
                 .ToList();
نظرات مطالب
بررسی علت CPU Usage بالای برنامه در حال اجرا
- بله. هر بار در طی حلقه شما CPU Usage یک هسته رو دریافت می‌کنید. یک روش دیگر هم اینجا ذکر شده: ((+)). که باید دوبار اطلاعات دریافت شود و بعد بین آن‌ها هم یک sleep کوچک نیاز است.
- لیست تمام پروسه‌های ویندوز با این متد قابل دریافت است: Process.GetProcesses (در فضای نام System.Diagnostics) که یک سری اطلاعات در مورد TotalProcessorTime دارد.
همچنین این پروژه هم در راستای مطلب جاری است:
How to get CPU usage of processes and threads
البته این پروژه اطلاعاتی در مورد stack trace تردها (مثل روش فوق) نمی‌دهد فقط یک سری اطلاعات کلی است.