سری بررسی Web API و OData V4
سری AngularJS Tutorial
مراحل تکامل یک برنامه نویس
معرفی فریمورک FAST مایکروسافت
What is FAST?
FAST is a collection of technologies built on Web Components and modern Web Standards, designed to help you efficiently tackle some of the most common challenges in website and application design and development.
What are Web Components?
"Web Components" is an umbrella term that refers to a collection of web standards focused on enabling the creation of custom HTML elements. Some of the standards that are under the umbrella include the ability to define new HTML tags, plug into a standard component lifecycle, encapsulate HTML rendering and CSS, parameterize CSS, skin components, and more. Each of these platform features is defined by the W3C and has shipped in every major browser today.
For decades, passwords have been the common backbone (headache) of authentication and are well known to lack in security while being frustrating and difficult to use. As we continue to see daily data breaches, the reality of moving away from weak static credentials and killing the password is upon us. Join this session to learn how FIDO2 and WebAuthn open authentication standards, in conjunction with YubiKeys, are solving the elimination of passwords at scale. Hear how organizations like Microsoft have implemented these standards for a true passwordless experience and find out how your organization can follow suit. You'll gain a greater understanding of how to achieve a modern and flexible security architecture through the use of FIDO open standards and hardware authenticators.
Top Issues Fixed in Visual Studio 2019 version 16.3.1
معرفی Response Cache
جایگزین ویژگی حذف شدهی OutputCache در ASP.NET Core، ویژگی جدیدی است به نام ResponseCache و هدف آن تنظیم هدرهای مرتبط با caching مخصوص HTTP Response ارائه شدهاست. به همین جهت با مکانیزم OutputCache قدیمی ASP.NET MVC که اطلاعات را در حافظهی سرور کش میکرد، کاملا متفاوت است.
البته قرار است میان افزار OutputCache را در نگارشهای آتی ASP.NET Core نیز ارائه کنند.
[ResponseCache(Duration = 60)] public IActionResult Contact() { ViewData["Message"] = "Your contact page."; return View(); }
Cache-Control: public,max-age=60
یک نکته: این ویژگی را هم میتوان به کل کنترلر اعمال کرد و هم به یک اکشن متد خاص. اگر این ویژگی هم به کنترلر و هم به اکشن متدی در آن کنترلر اعمال شده باشد، تنظیمات در سطح متدها، تنظیمات در سطح کلاس را بازنویسی میکنند.
تعیین مکان کش شدن خروجی یک اکشن متد
در هدر فوق، عبارت public را مشاهده میکنید. این public بودن به این معنا است که امکان کش شدن این خروجی، توسط کش سرورهای اشتراکی بین راه هم وجود دارد.
اگر میخواهید این امکان را غیرفعال کنید، نیاز است این public به private تنظیم شود:
[ResponseCache(Duration = 60, Location = ResponseCacheLocation.Client)]
غیرفعال کردن کش شدن خروجی یک اکشن متد
اگر خواستید از کش شدن خروجی یک اکشن متد تحت هر حالتی جلوگیری کنید، مکان آنرا به None و NoStore آنرا به true تنظیم کنید:
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(); }
Cache-Control: no-store,no-cache Pragma: no-cache
امکان تعریف پروفایلهای کش
بجای اینکه تنظیمات کش کردن تکراری را به انواع و اقسام اکشن متدها اعمال کنیم، میتوان برای آنها پروفایل ایجاد کرده و از نام این پروفایل، جهت به اشتراک گذاری تنظیمات استفاده کنیم. برای این منظور به کلاس آغازین برنامه مراجعه کرده و جایی که سرویس ASP.NET MVC را فعال سازی کردهاید، پروفایل کش جدیدی را تعریف کنید:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.CacheProfiles.Add("PrivateCache", new CacheProfile { Duration = 60, Location = ResponseCacheLocation.Client }); });
[ResponseCache(CacheProfileName = "PrivateCache")]
معرفی سرویس کش درون حافظهای
در نگارشهای پیشین ASP.NET، متدهایی برای کش کردن موقتی اطلاعات در حافظه و سپس بازیابی آنها وجود داشتند. در ASP.NET Core، این متدها توسط سرویس ارائه کنندهی IMemoryCache در اختیار برنامه قرار میگیرند. برای فعال سازی این سرویس جدید باید مراحل ذیل طی شوند:
الف) ابتدا بستهی Microsoft.Extensions.Caching.Memory را به لیست وابستگیهای پروژه در فایل project.json اضافه کنید:
{ "dependencies": { //same as before "Microsoft.Extensions.Caching.Memory": "1.0.0" },
public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache();
[Route("DNT/[controller]")] public class AboutController : Controller { private readonly IMemoryCache _memoryCache; public AboutController(IMemoryCache memoryCache) { _memoryCache = memoryCache; } [Route("")] public ActionResult Hello() { string cacheKey = "my-cache-key"; string greeting; if (!_memoryCache.TryGetValue(cacheKey, out greeting)) { greeting = "Hello"; // store in the cache _memoryCache.Set(cacheKey, greeting, new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(1))); } return Content($"{greeting} from DNT!"); }
تنظیمات منقضی شدن کش نیز به حالت absolute تنظیم شدهاست. یعنی پس از یک دقیقه حتما منقضی میشود. اگر فراخوانیهای این متد زیاد است، میتوان حالت منقضی شدن sliding را تنظیم کرد:
new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromMinutes(5))
اگر خواستیم تا این کش سر ساعت منقضی شود، اما در طی این یک ساعت به صورت sliding عمل کند، میتوان از ترکیب دو حالت مطلق و لغزشی استفاده کرد:
new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromMinutes(5)) .SetAbsoluteExpiration(TimeSpan.FromHours(1))
یک نکته: اگر فشار حافظهی سرور زیاد شود، مدیر حافظهی این کش، شروع به منقضی کردن آیتمهایی با حق تقدم پایین میکند. بالاترین حق تقدم را حالت NeverRemove ذیل دارد:
new MemoryCacheEntryOptions() .SetPriority(CacheItemPriority.NeverRemove))
معرفی Tag Helpers مخصوص کش کردن قسمتی از صفحه
در ادامهی مبحث معرفی Tag Helpers، تعدادی از آنها جهت کش کردن محتوای قسمتی از صفحه، طراحی شدهاند:
<cache expires-after="@TimeSpan.FromMinutes(10)"> @Html.Partial("_WhatsNew") *last updated @DateTime.Now.ToLongTimeString() </cache>
برای نمونه در مثال فوق، محتوای پارشال ویوو رندر شده و همچنین تاریخی که پس از آن نمایش داده شدهاست، به مدت 10 دقیقه در حافظهی سرور کش میشوند. اگر این زمان تنظیم نشود، تا زمانیکه برنامه در سرور مشغول به کار است، این قسمت منقضی نخواهد شد.
در اینجا اگر expires-after ذکر شده بود، یعنی پس از این مدت زمان، کش منقضی میشود.
<cache expires-after="@TimeSpan.FromSeconds(5)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-on="@DateTime.Today.AddDays(1).AddTicks(-1)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-sliding="@TimeSpan.FromMinutes(5)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-user="true"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-route="id"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-query="search"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-cookie="MyAppCookie"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-header="User-Agent"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by="@ViewBag.ProductId"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-user="true" vary-by-route="id"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
به علاوه چون زیر ساخت این Tag Helper همان Microsoft.Extensions.Caching.Memory است، امکان تنظیم حق تقدم حذف شدن آیتمهای کش شده نیز وجود دارد:
<cache expires-sliding="@TimeSpan.FromMinutes(10)" priority="@Microsoft.Extensions.Caching.Memory.CacheItemPriority.NeverRemove"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
مبحث تکمیلی
امکان ذخیره سازی آیتمهای کش شده در بانک اطلاعاتی (بجای حافظهی فرار) نیز پیش بینی شدهاست که تحت عنوان «کش توزیع شده» در دسترس است.
Working with a Distributed Cache
Git for Windows 2.19.0 منتشر شد
New Features
Comes with Git v2.19.0.
There are now fast, built-in versions of git stash and git rebase, available as experimental options.
The included OpenSSH client now enables modern ciphers.
The gitweb component was removed because it is highly unlikely to be used on Windows.
The git archimport tool (which was probably used by exactly 0 users) is no longer included in Git for Windows.