Forwarded from Software Philosophy
۱۲ نکته در مورد Debugging در ویژوال استودیو:
در این پست فرض بر این است که خواننده اصول اولیه دیباگ کردن با ویژوال استودیو را می داند.
در صورتی که تسلط کامل بر روی این ۱۲ نکته داشته باشید، می توانید با کیفیت بالایی کد های خود را دیباگ کنید.
مواردی که در این پست به آن پرداخته شده است:
✅ 1) Run to Cursor : Ctrl+F10
✅ 2) Run through here with a mouse click
✅ 3) Set next statement to here : holding the key Ctrl
✅ 4) Data breakpoint: Break when value changes
✅ 5) Conditional breakpoint
✅ 6) Trace breakpoint
✅ 7) Track Objects that Are Out-Of-Scope : Make Object ID
✅ 8) View values returned by functions :
Debug > Windows > Autos
✅ 9) Reattach To Process: Shift+Alt+P
✅ 10) No-Side-Effect evaluation in Immediate Window and in the Watch Window
✅ 11) Show Threads in Source
✅ 12) Debug source code decompiled from IL code
جزئیات کامل را میتوانید در لینک زیر مطالعه کنید:
https://blog.ndepend.com/12-visual-studio-debugging-productivity-tips/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
___
در این پست فرض بر این است که خواننده اصول اولیه دیباگ کردن با ویژوال استودیو را می داند.
در صورتی که تسلط کامل بر روی این ۱۲ نکته داشته باشید، می توانید با کیفیت بالایی کد های خود را دیباگ کنید.
مواردی که در این پست به آن پرداخته شده است:
✅ 1) Run to Cursor : Ctrl+F10
✅ 2) Run through here with a mouse click
✅ 3) Set next statement to here : holding the key Ctrl
✅ 4) Data breakpoint: Break when value changes
✅ 5) Conditional breakpoint
✅ 6) Trace breakpoint
✅ 7) Track Objects that Are Out-Of-Scope : Make Object ID
✅ 8) View values returned by functions :
Debug > Windows > Autos
✅ 9) Reattach To Process: Shift+Alt+P
✅ 10) No-Side-Effect evaluation in Immediate Window and in the Watch Window
✅ 11) Show Threads in Source
✅ 12) Debug source code decompiled from IL code
جزئیات کامل را میتوانید در لینک زیر مطالعه کنید:
https://blog.ndepend.com/12-visual-studio-debugging-productivity-tips/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
___
NDepend Blog
12 Visual Studio Debugging Productivity Tips - NDepend Blog
The top 12 Visual Studio debugging productivity tips illustrated with some GIFs. Learn these tips now and boost your debugging sessions.
✅ این Mock یا Mocking چیه؟!!
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
_____________
@DotNetZoom
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
_____________
@DotNetZoom
GitHub
GitHub - devlooped/moq: The most popular and friendly mocking framework for .NET
The most popular and friendly mocking framework for .NET - devlooped/moq
❇️ آموزش استفاده از Container در NET Core. (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[00:44] - What are some of advantages of containers?
[01:14] - How do containers compare to other hosting options?
[04:14] - Demo of Visual Studio tooling for containers
[07:06] - Deploying your container to Azure
Useful Links
Azure Container Service (AKS)
Azure Container Registry
.NET Core Docker container images
ASP.NET Core Docker container images
Create a Free Account (Azure)
_____________
@DotNetZoom
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[00:44] - What are some of advantages of containers?
[01:14] - How do containers compare to other hosting options?
[04:14] - Demo of Visual Studio tooling for containers
[07:06] - Deploying your container to Azure
Useful Links
Azure Container Service (AKS)
Azure Container Registry
.NET Core Docker container images
ASP.NET Core Docker container images
Create a Free Account (Azure)
_____________
@DotNetZoom
Docs
.NET Core and Containers
On this episode of On.NET, Microsoft Cloud Developer Advocate, Jeremy Likness, is joined by Microsoft Most Valuable Professional (MVP), Josh Lane, to discuss .NET Core and Containers. Josh and Jeremy discuss what containers are and how they fit into modern…
✅ مقایسه پرفرمنس gRPC و REST
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@DotNetZoom
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@DotNetZoom
❇️ اگه میخواین مفهوم Hash و Salt رو درک کنین
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
_______________
@DotNetZoom
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
_______________
@DotNetZoom
آپارات - سرویس اشتراک ویدیو
هش (یک از سه) - درک مفهوم
هش ها مفهوم مهمی در برنامه نویسی هستن و منم دوستشون دارم. پس بیاین معرفی شون کنیم، بگیم چی هستن و به چه دردی می خورن.
❇️ آموزش عیب یابی و رفع مشکلات Performance ایی برنامه های ASP.NET Core (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
____________
@DotNetZoom
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
____________
@DotNetZoom
Docs
Diagnosing ASP.NET Core performance issues
In the episode, Mike Rousos shows us how we can use tools like PerfView and PerfCollect to diagnose performance problems in ASP.NET Core applications. He discusses how we can use the tools for performance analysis on both Linux and Windows servers. Also,…
✅ افزایش امنیت JWT توسط Refresh Token در ASP NET Core
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
C-Sharpcorner
Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token
In this article , you will learn how to deal with the refresh token when you use jwt (JSON Web Token) as your access_token.
Forwarded from کدهک
آموزش RabbitMQ و پیاده سازی الگوی Messaging
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
❇️ #ویدئو آموزش معماری Microservice در ASP.NET Core (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[01:06] - Introducing the .NET application architecture website
[05:23] - Running the reference application
[06:33] - Understanding the target audience
[07:35] - Testing strategy
[09:11] - Exploring the technology stack
[13:25] - Managing the weight of the API gateway
[16:35] - Adopting the guidance
[21:33] - Communication patterns between microservices
[22:36] - Modeling challenges with microservices
[26:14] - Getting help with the reference application
Useful Links
GitHub repository for eShopOnContainers
.NET Microservices - Architecture e-book
.NET Application Architecture Guidance
____________
@DotNetZoom
======================
Implement microservices patterns with .NET Core and Docker containers
https://channel9.msdn.com/events/Ignite/Microsoft-Ignite-Orlando-2017/BRK3317
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[01:06] - Introducing the .NET application architecture website
[05:23] - Running the reference application
[06:33] - Understanding the target audience
[07:35] - Testing strategy
[09:11] - Exploring the technology stack
[13:25] - Managing the weight of the API gateway
[16:35] - Adopting the guidance
[21:33] - Communication patterns between microservices
[22:36] - Modeling challenges with microservices
[26:14] - Getting help with the reference application
Useful Links
GitHub repository for eShopOnContainers
.NET Microservices - Architecture e-book
.NET Application Architecture Guidance
____________
@DotNetZoom
======================
Implement microservices patterns with .NET Core and Docker containers
https://channel9.msdn.com/events/Ignite/Microsoft-Ignite-Orlando-2017/BRK3317
Docs
Microservice Architecture with ASP.NET Core
Having a solid architecture is an essential piece for ensuring the longevity of your software.In this episode Cesar De la Torre Llorente (@cesardelatorre) comes on the show to talk about ASP.NET Core application architecture for microservices and containers.[01:06]…
✅ قابلیت Decompile کد های #C در Visual Studio
قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم
این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست
جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین
بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده
این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین
جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم
این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست
جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین
بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده
این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین
جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
✅ پروژه سورس باز فروش بیمه به صورت Microservices در NET Core.
🔰 تکنولوژی های استفاده شده
.NET Core 2.1
Entity Framework Core
#MediatR
#Marten
#Eureka
#Ocelot
#JWT Tokens
#RestEase
#RawRabbit
#NHibernate
#Polly
#NEST (#ElasticSearch client)
#Dapper
#SignalR
#MicroServices
DynamicExpresso
https://github.com/asc-lab/dotnetcore-microservices-poc
___________
@DotNetZoom
🔰 تکنولوژی های استفاده شده
.NET Core 2.1
Entity Framework Core
#MediatR
#Marten
#Eureka
#Ocelot
#JWT Tokens
#RestEase
#RawRabbit
#NHibernate
#Polly
#NEST (#ElasticSearch client)
#Dapper
#SignalR
#MicroServices
DynamicExpresso
https://github.com/asc-lab/dotnetcore-microservices-poc
___________
@DotNetZoom
✅ برترین Shortcut های Visual Studio 2019
اگه میخواین از ویژوال استادیو به صورت حرفه ای استفاده کنین و البته بازدهی تون رو خیلی بیشتر کنین، باید میانبر های ویژوال استادیو رو بلد باشین. اینطوری کد نویسی خیلی شیرین تر میشه.
🔰در اینجا سعی کردم بهترین و کاربردی ترین میانبر ها رو لیست کنم:
🔸Code Formatting : Ctrl+K+D
کد شما رو تر و تمیز یا به به قولی صاف و صوف میکنه
🔹Suggested Code Refactoring : Ctrl+. or Alt+Enter
پیشنهاد هایی برای ریفکتور کردن کدی که cursor موس روش هست بهتون میده (در واقع light bulb ویژوال استادیو رو باز میکنه)
🔸Go to Definition : F12
شما رو به جایی که کلاس/اینترفیس/متد مربوطه تعریف شده ارجاع میده
🔹Go to Implementations : Shift+F12
شما رو به جایی که کلاس/اینترفیس/متد پیاده سازی شده ارجاع میده (روی اینترفیس تست اش کنین) + نمایش لیست رفرنس ها
🔸Go to Line : Ctrl+G
شماره خط کد رو از شما میگیره و شما رو به کد مربوطه ارجاع میده
🔹Find : Ctrl+F
پنجره جستجو رو براتون باز میکنه
🔸Find in files (Advance) : Ctrl+Shift+F
پنجره جستجوی پیشرفته رو براتون باز میکنه
🔹Go to All search : Ctrl+T or Ctrl+,
بنجره جستجو در همه جا (کد ها، نام فایل ها، و...) رو براتون باز میکنه.
🔸Quick Search : Ctrl+Alt+Q
یه چیزی مشابه قبلی با این تفاوت که توی ابزار و امکانات ویژوال استادیو هم سرچ میکنه (میشه انتخاب کرد فقط تو کد ها و فایل ها سرچ کنه)
🔹Show Current File in Solution Explorer : Ctrl+[+S
فایل جاری رو توی Solution Explorer به صورت انتخاب شده نشونش میده
🔸Go to Matching Brace : Ctrl+]
شما رو به براکت شروع و پایان کد مربوطه (متد/شرط/حله و...) ارجاع میده
🔹Comment Selected Code : Ctrl+K+C
کد انتخاب شده یا خطی که cursor موس روش هست رو کامنت میکنه
🔸Uncomment Selected Code : Ctrl+K+U
کد انتخاب شده یا خطی که cursor موس روش هست رو از کامنت خارج میکنه
🔹Show Autocomlete : Ctrl+Space
بسته به اینکه cursor موس تون روی چه کدی هست منوی Autocomplete مربوطه رو باز میکنه
🔸Show Overloads : Ctrl+Shift+Space
وقتی cursor موس روی یک متد هست، لیست overload های دیگه شو نشون میده
🔹Collaps methods : Ctrl+M+O
متد های فایل جاری رو collapse میکنه (میبنده) مناسب واسه وقتی که کلاس شلوغی دارین
🔸Expand methods : Ctrl+M+P
متد های فایل جاری رو از collapse در بر میگردونه به حالت عادی (باز میکنه)
🔹Ctrl+Enter
یک خط جدید (new line) بالای جایی که cursor موس قرار داره ایجاد میکنه
🔸Ctrl+Shift+Enter
یک خط جدید (new line) پایین جایی که cursor موس قرار داره ایجاد میکنه
🔹Rename Property : Ctrl+R+R
نام یک پروپرتی، متد، کلاس و... رو در همه جای پروژه تغییر میده
🔸View Clipboard history : Ctrl+Shift+V
لیست تاریخچه کلیپ بورد شما رو نشون میده و میتونین ازش انتخاب کنین
___________________
@DotNetZoom
اگه میخواین از ویژوال استادیو به صورت حرفه ای استفاده کنین و البته بازدهی تون رو خیلی بیشتر کنین، باید میانبر های ویژوال استادیو رو بلد باشین. اینطوری کد نویسی خیلی شیرین تر میشه.
🔰در اینجا سعی کردم بهترین و کاربردی ترین میانبر ها رو لیست کنم:
🔸Code Formatting : Ctrl+K+D
کد شما رو تر و تمیز یا به به قولی صاف و صوف میکنه
🔹Suggested Code Refactoring : Ctrl+. or Alt+Enter
پیشنهاد هایی برای ریفکتور کردن کدی که cursor موس روش هست بهتون میده (در واقع light bulb ویژوال استادیو رو باز میکنه)
🔸Go to Definition : F12
شما رو به جایی که کلاس/اینترفیس/متد مربوطه تعریف شده ارجاع میده
🔹Go to Implementations : Shift+F12
شما رو به جایی که کلاس/اینترفیس/متد پیاده سازی شده ارجاع میده (روی اینترفیس تست اش کنین) + نمایش لیست رفرنس ها
🔸Go to Line : Ctrl+G
شماره خط کد رو از شما میگیره و شما رو به کد مربوطه ارجاع میده
🔹Find : Ctrl+F
پنجره جستجو رو براتون باز میکنه
🔸Find in files (Advance) : Ctrl+Shift+F
پنجره جستجوی پیشرفته رو براتون باز میکنه
🔹Go to All search : Ctrl+T or Ctrl+,
بنجره جستجو در همه جا (کد ها، نام فایل ها، و...) رو براتون باز میکنه.
🔸Quick Search : Ctrl+Alt+Q
یه چیزی مشابه قبلی با این تفاوت که توی ابزار و امکانات ویژوال استادیو هم سرچ میکنه (میشه انتخاب کرد فقط تو کد ها و فایل ها سرچ کنه)
🔹Show Current File in Solution Explorer : Ctrl+[+S
فایل جاری رو توی Solution Explorer به صورت انتخاب شده نشونش میده
🔸Go to Matching Brace : Ctrl+]
شما رو به براکت شروع و پایان کد مربوطه (متد/شرط/حله و...) ارجاع میده
🔹Comment Selected Code : Ctrl+K+C
کد انتخاب شده یا خطی که cursor موس روش هست رو کامنت میکنه
🔸Uncomment Selected Code : Ctrl+K+U
کد انتخاب شده یا خطی که cursor موس روش هست رو از کامنت خارج میکنه
🔹Show Autocomlete : Ctrl+Space
بسته به اینکه cursor موس تون روی چه کدی هست منوی Autocomplete مربوطه رو باز میکنه
🔸Show Overloads : Ctrl+Shift+Space
وقتی cursor موس روی یک متد هست، لیست overload های دیگه شو نشون میده
🔹Collaps methods : Ctrl+M+O
متد های فایل جاری رو collapse میکنه (میبنده) مناسب واسه وقتی که کلاس شلوغی دارین
🔸Expand methods : Ctrl+M+P
متد های فایل جاری رو از collapse در بر میگردونه به حالت عادی (باز میکنه)
🔹Ctrl+Enter
یک خط جدید (new line) بالای جایی که cursor موس قرار داره ایجاد میکنه
🔸Ctrl+Shift+Enter
یک خط جدید (new line) پایین جایی که cursor موس قرار داره ایجاد میکنه
🔹Rename Property : Ctrl+R+R
نام یک پروپرتی، متد، کلاس و... رو در همه جای پروژه تغییر میده
🔸View Clipboard history : Ctrl+Shift+V
لیست تاریخچه کلیپ بورد شما رو نشون میده و میتونین ازش انتخاب کنین
___________________
@DotNetZoom
Telegram
Attach Files
✳️میانافزاری برای ثبت آمار بازدیدکنندگان برنامههای ASP.NET Core
مقاله زیر نمونه پیادی سازی یک middleware برای asp core رو نشون میده که کارش ثبت آمار بازدید کنندگان سایت هست. اینکه چه کسانی با چه ip هایی و از چه کشور هایی در چه زمان هایی کدام صفحات رو بازدید کردند.
کانفیگ و استفاده ازش بسیار راحته و آموزشش در لینک زیر هست
https://matteofabbri.org/read/server-side-analytics
🔸نکات جالبی که این کتابخونه داره اینه که:
۱- برای ذخیره سازی اطلاعات میتونین از store های موجود از جمله MongoDb, SqlServer, SqLite استفاده کنین
۲- یا اینکه store سفارشی خودتون رو بنویسین و مثلا اطلاعات رو توی یه دیتابیس دیگه مثل MySql ذخیره کنین
۳- میتونین مسیر ها یا پسوند هایی رو مشخص کنین که اطلاعات اونا رو اصلا ثبت نکنه. مثلا مسیر /js یا پسوند های .js, .css, .jpg
۴- میتونین تنظیم کنین تا فقط درخواست های یک مسیر مشخص رو ثبت کنه و نه تمام درخواست های سایت
۵- نام جداول لازم برای ذخیره آمار بازدید کنندگان رو تغییر بدین
۶- توسط یک دیتابیس لوکال، نام کشور ها رو از روی ip تشخیص میده
۷- اگه بر اساس range ip نتونست نام کشور رو پیدا کنه، از api های دیگری جهت تشخص نام کشور استفاده میکنه که دیتای معتبر تری میدن.
مخزن گیتهاب :
https://github.com/matteofabbri/ServerSideAnalytics
دمو گزارش آمار بازدیدکنندگان :
https://matteofabbri.org/stat
اطلاعات بیشتر:
https://www.codeproject.com/Articles/1251484/Introducing-Server-Side-Analytics-for-ASP-NET-Core
پیشنهاد میکنم سورس کدش رو بررسی کنین، ایده های جالبی بهتون میده
_______________
@DotNetZoom
مقاله زیر نمونه پیادی سازی یک middleware برای asp core رو نشون میده که کارش ثبت آمار بازدید کنندگان سایت هست. اینکه چه کسانی با چه ip هایی و از چه کشور هایی در چه زمان هایی کدام صفحات رو بازدید کردند.
کانفیگ و استفاده ازش بسیار راحته و آموزشش در لینک زیر هست
https://matteofabbri.org/read/server-side-analytics
🔸نکات جالبی که این کتابخونه داره اینه که:
۱- برای ذخیره سازی اطلاعات میتونین از store های موجود از جمله MongoDb, SqlServer, SqLite استفاده کنین
۲- یا اینکه store سفارشی خودتون رو بنویسین و مثلا اطلاعات رو توی یه دیتابیس دیگه مثل MySql ذخیره کنین
۳- میتونین مسیر ها یا پسوند هایی رو مشخص کنین که اطلاعات اونا رو اصلا ثبت نکنه. مثلا مسیر /js یا پسوند های .js, .css, .jpg
۴- میتونین تنظیم کنین تا فقط درخواست های یک مسیر مشخص رو ثبت کنه و نه تمام درخواست های سایت
۵- نام جداول لازم برای ذخیره آمار بازدید کنندگان رو تغییر بدین
۶- توسط یک دیتابیس لوکال، نام کشور ها رو از روی ip تشخیص میده
۷- اگه بر اساس range ip نتونست نام کشور رو پیدا کنه، از api های دیگری جهت تشخص نام کشور استفاده میکنه که دیتای معتبر تری میدن.
مخزن گیتهاب :
https://github.com/matteofabbri/ServerSideAnalytics
دمو گزارش آمار بازدیدکنندگان :
https://matteofabbri.org/stat
اطلاعات بیشتر:
https://www.codeproject.com/Articles/1251484/Introducing-Server-Side-Analytics-for-ASP-NET-Core
پیشنهاد میکنم سورس کدش رو بررسی کنین، ایده های جالبی بهتون میده
_______________
@DotNetZoom
✅ منتشر شد ASP.NET Core .NET 5 Preview 8
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی Model Binding و Validation برای نوع های record (جدید - معرفی شده در C# 9)
2- قابلیت Auto Refresh به هنگام استفاده از dotnet watch (این مورد هنوز توسط VS پشتیبانی نمیشه و فقط توسط CLI امکان پذیره)
3- امکان نمایش log های Console در قالب JSON (نمونه کد)
4- قابلیت CSS isolation برای کامپوننت های Blazor
5- امکان Lazy loading (لود با تاخیر) اسمبلی های Blazor جهت افزایش پرفرمنس (نمونه کد)
✅ منتشر شد EF Core 5.0 Preview 8
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-ef-core-5-0-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی از ارث بری TPT
2- پشتیبانی از Table-valued Functions در SQL (فراخوانی function هایی که میتونن خروجی table داشته باشن)
3- بهبود مایگریشن در SQLite
4- امکان تنظیم قابلیت Split queries (جهت افزایش پرفرمنس هنگام Join و Include های زیاد) به صورت سراسری
✅ منتشر شد NET 5.0 Preview 8.
https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی از قابلیت های جدید C# 9 (از جمله Top-level programs و Pattern matching و Target-typed new expressions)
2- اصلاح بیش از 80% از API های دات نت جهت پشتیبانی از Nullable Annotations (که به قابلیت nullable reference type موجود در C# 8 کمک میکنه)
3- بهبود های زیرساختی و پرفرمنسی (از جمله Regular Expression)
4- پشتیبانی از ClickOnce Publish (البته هنوز دارن روش کار میکننن و ممکنه تا ورژن RC2 تکمیل بشه)
🔰 پ.ن:
🔸 تیم EF Core توی آپدیت های اخیر خیلی عالی عمل کرده و خروجی ملموس تری نسبت به تیم های NET. و ASP Core داشته. توی این ریلیز های اخیر هربار کلی قابلیت مفید و کاربردی رو اضافه کرده که EF Core رو پخته تر از همیشه کرده.😎👌(لیست این تغییرات رو اینجا میتونین ببینین)
🔹 تا انتشار کامل NET 5. فقط 3تا ورژن دیگه مونده. 2تا RC و یک RTM (همون نسخه نهایی) 😍✌️
___________________
@DotNetZoom
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی Model Binding و Validation برای نوع های record (جدید - معرفی شده در C# 9)
2- قابلیت Auto Refresh به هنگام استفاده از dotnet watch (این مورد هنوز توسط VS پشتیبانی نمیشه و فقط توسط CLI امکان پذیره)
3- امکان نمایش log های Console در قالب JSON (نمونه کد)
4- قابلیت CSS isolation برای کامپوننت های Blazor
5- امکان Lazy loading (لود با تاخیر) اسمبلی های Blazor جهت افزایش پرفرمنس (نمونه کد)
✅ منتشر شد EF Core 5.0 Preview 8
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-ef-core-5-0-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی از ارث بری TPT
2- پشتیبانی از Table-valued Functions در SQL (فراخوانی function هایی که میتونن خروجی table داشته باشن)
3- بهبود مایگریشن در SQLite
4- امکان تنظیم قابلیت Split queries (جهت افزایش پرفرمنس هنگام Join و Include های زیاد) به صورت سراسری
✅ منتشر شد NET 5.0 Preview 8.
https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-8/
🔰 مهمترین تغییرات
1- پشتیبانی از قابلیت های جدید C# 9 (از جمله Top-level programs و Pattern matching و Target-typed new expressions)
2- اصلاح بیش از 80% از API های دات نت جهت پشتیبانی از Nullable Annotations (که به قابلیت nullable reference type موجود در C# 8 کمک میکنه)
3- بهبود های زیرساختی و پرفرمنسی (از جمله Regular Expression)
4- پشتیبانی از ClickOnce Publish (البته هنوز دارن روش کار میکننن و ممکنه تا ورژن RC2 تکمیل بشه)
🔰 پ.ن:
🔸 تیم EF Core توی آپدیت های اخیر خیلی عالی عمل کرده و خروجی ملموس تری نسبت به تیم های NET. و ASP Core داشته. توی این ریلیز های اخیر هربار کلی قابلیت مفید و کاربردی رو اضافه کرده که EF Core رو پخته تر از همیشه کرده.😎👌(لیست این تغییرات رو اینجا میتونین ببینین)
🔹 تا انتشار کامل NET 5. فقط 3تا ورژن دیگه مونده. 2تا RC و یک RTM (همون نسخه نهایی) 😍✌️
___________________
@DotNetZoom
ASP.NET Blog
ASP.NET Core updates in .NET 5 Preview 8
.NET 5 Preview 8 is now available and is ready for evaluation. Here’s what’s new in this release: Azure Active Directory authentication with Microsoft.Identity.Web CSS isolation for Blazor components Lazy loading in Blazor WebAssembly Updated Blazor WebAssembly…
❇استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
@DotNetZoom
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };
- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };
ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>
اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشهدرصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("http://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("http://www.contoso.com");
request.Proxy = proxy;
_______________@DotNetZoom
مقایسه تکنولوژی استفاده شده در شرکت های بزرگ برنامه نویسی دنیا
توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/
مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
___________
@DotNetZoom
توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/
مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
___________
@DotNetZoom
مقایسه بهترین کتابخانه های دات نت
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.
این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده
مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib
🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.
___
@DotNetZoom
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.
این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده
مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib
🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.
___
@DotNetZoom
❇️ کتاب رایگان ماکروسافت برای آموزش #Microservices در NET Core.
💎بدون شک این کتاب یکی از بهترین و کامل ترین منابع جهت یادگیری توسعه برنامههای مبتنی بر معماری Microservices و مدیریت آنها با استفاده از Docker Containers در NET Core. است.
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
لینک دانلود PDF کتاب
https://aka.ms/microservicesebook
🔸برای یادگیری بهتر میتوانید پروژه eShopOnContainers که بر اساس مفاهیم این آموزش نوشته شده است را بررسی کنید.
https://github.com/dotnet-architecture/eShopOnContainers
___________________
@DotNetZoom
💎بدون شک این کتاب یکی از بهترین و کامل ترین منابع جهت یادگیری توسعه برنامههای مبتنی بر معماری Microservices و مدیریت آنها با استفاده از Docker Containers در NET Core. است.
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
لینک دانلود PDF کتاب
https://aka.ms/microservicesebook
🔸برای یادگیری بهتر میتوانید پروژه eShopOnContainers که بر اساس مفاهیم این آموزش نوشته شده است را بررسی کنید.
https://github.com/dotnet-architecture/eShopOnContainers
___________________
@DotNetZoom
✅ سریع ترین Object Mapper دات نت
کتابخانه Mapster مشابه AutoMapper است ولی با پرفرمنس باورنکردنی و فوق سریع
این کتابخانه حتی از حالت دستی هم سریع تر است!
https://github.com/MapsterMapper/Mapster
طبق بنچمارک زیر متونین پرفرمنس این روش ها رو مقایسه کنین.
https://github.com/mjebrahimi/Benchmark.netCoreMappers
_______________
@DotNetZoom
کتابخانه Mapster مشابه AutoMapper است ولی با پرفرمنس باورنکردنی و فوق سریع
این کتابخانه حتی از حالت دستی هم سریع تر است!
https://github.com/MapsterMapper/Mapster
طبق بنچمارک زیر متونین پرفرمنس این روش ها رو مقایسه کنین.
https://github.com/mjebrahimi/Benchmark.netCoreMappers
_______________
@DotNetZoom
❇️ بازنویسی یک برنامهی قدیمی Web Form با DDD، TDD و NET Core
پیشنهاد میکنم این مقاله طولانی رو بخونین، موارد خیلی زیادی رو به صورت عملی یاد میگیرین
فقط کافیه لیست تکنولوژی ها و معماری های استفاده شده رو ببینین تا به پر مایه بودنش پی ببرین
- #DDD & #CQRS
- Using CoreDdd (a library to work with DDD and CQRS.)
- #TDD & #Unit_Testing
- Using #NUnit (a unit test framework)
- Using #Shouldly (an assertion framework for NUnit)
- Using #Nhibernate ORM & CoreDdd.Nhibernate (for persistence layer)
- Using #FluentNHibernate (for database mappings)
- #Mocking & #Fake Services
- Using #FakeItEasy (an easy mocking framework)
- Adding ASP NET Core & built-in IOC Container
- #Command_Handler Pattern
- #Domain_Events Handler Pattern
- Domain Events Message Handler Pattern
- Adding #Message_Bus
- Using #Rebus & Rebus.Async (a message bus library)
- Using Await/Async for Performance Boost
🔸لینک مقاله :
https://bit.ly/2UpoW5F
🔹ریپازیتوری پروژه :
https://github.com/xhafan/legacy-to-coreddd
____
@DotNetZoom
پیشنهاد میکنم این مقاله طولانی رو بخونین، موارد خیلی زیادی رو به صورت عملی یاد میگیرین
فقط کافیه لیست تکنولوژی ها و معماری های استفاده شده رو ببینین تا به پر مایه بودنش پی ببرین
- #DDD & #CQRS
- Using CoreDdd (a library to work with DDD and CQRS.)
- #TDD & #Unit_Testing
- Using #NUnit (a unit test framework)
- Using #Shouldly (an assertion framework for NUnit)
- Using #Nhibernate ORM & CoreDdd.Nhibernate (for persistence layer)
- Using #FluentNHibernate (for database mappings)
- #Mocking & #Fake Services
- Using #FakeItEasy (an easy mocking framework)
- Adding ASP NET Core & built-in IOC Container
- #Command_Handler Pattern
- #Domain_Events Handler Pattern
- Domain Events Message Handler Pattern
- Adding #Message_Bus
- Using #Rebus & Rebus.Async (a message bus library)
- Using Await/Async for Performance Boost
🔸لینک مقاله :
https://bit.ly/2UpoW5F
🔹ریپازیتوری پروژه :
https://github.com/xhafan/legacy-to-coreddd
____
@DotNetZoom
✅ #یک_نکته
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@DotNetZoom
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
task.Wait();
var result = task.Result;
حتما حتما از روش زیر استفاده کنید var result = task.GetAwaiter().GetResult();
این روش دقیقا مانند روش اول است حتی بحث dead-lock و blocking ترد هم صادق است ولی ...در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@DotNetZoom
Codurance
Await vs GetAwaiter | Codurance
A tiny bit of async in your life. I have decided to talk about a little thing regarding the retrieval of results on C# while using async.