نظرات مطالب
پیاده سازی اسکرام با شیرپوینت
نه آنچنان. پایه کار همان است. برنامه نویسی شیرپوینت بیشتر مبتنی است بر ASP.NET Webforms و Work flow foundation و نگارش جدید آن WCF هم دارد.
و در کل شرکتی که می‌خواهد از SharePoint درست استفاده کند باید متخصص‌هایی با این توانایی‌ها داشته باشد:
- توانایی راه اندازی دومین ویندوز سرور
- توانایی راه اندازی Exchange server
- توانایی راه اندازی SQL Server
- آشنایی کامل با IIS
- تسلط کامل به برنامه نویسی ASP.NET و وب پارت نویسی.
- آشنایی با برنامه نویسی Workflow foundation

به نظر من مایکروسافت بسیاری از کتابخانه‌هایی را که به دات نت فریم ورک اضافه کرده فقط و فقط به خاطر SharePoint بوده نمونه‌اش همین Workflow foundation . من کمتر دیدم از این مورد خارج از SharePoint استفاده شود. یا اگر دقت کرده باشید ASP.NET 2.0 وب پارت هم دارد ولی باز هم ... کاربردش جای دیگری است.
یا در SQL Server 2008 یک سری از قابلیت‌های file stream ایی که اضافه شده فقط به خاطر مدیریت ساده‌تر و بهینه‌تر حجم بالای دیتابیس شیرپوینت در نگارش 2010 آن بوده که همه چیز داخل آن ذخیره می‌شود.
اشتراک‌ها
ASP.NET Core 5 Preview 6 منتشر شد

.NET 5 Preview 6 is now available and is ready for evaluation. Here’s what’s new in this release:

  • Blazor WebAssembly template now included
  • JSON extension methods for HttpRequest and HttpResponse
  • Extension method to allow anonymous access to an endpoint
  • Custom handling of authorization failures
  • SignalR Hub filters 
ASP.NET Core 5 Preview 6 منتشر شد
مطالب
امکان استفاده از یک هارد SSD بجای RAM در SQL Server 2014
Buffer Pool یکی از مصرف کنندگان اصلی حافظه در SQL Server است. برای مثال زمانیکه اطلاعاتی را از بانک اطلاعاتی دریافت می‌کنید، این داده‌ها در Buffer Pool کش می‌شوند. همچنین SQL Server اطلاعات کلیه Execution Plans را نیز در Plan Cache که جزئی از Buffer Pool است، برای استفاده‌ی مجدد نگهداری می‌کند. هر چقدر حافظه‌ی فیزیکی سرور شما بیشتر باشد، مقدار Buffer Pool نیز به همین میزان افزایش خواهد یافت که البته حداکثر آن‌را می‌توان در تنظیمات حافظه‌ی سرور محدود کرد (Max Server Memory setting).
در دنیای واقعی میزان حافظه‌ی فیزیکی سرورها محدود است. در SQL Server 2014 راه حلی برای این مشکل تحت عنوان Buffer Pool Extensions ارائه شده‌است که محل قرارگیری آن‌را در تصویر ذیل مشاهده می‌کنید:


Buffer Pool Extensions از یک فایل ساده که به آن Extension File نیز گفته می‌شود، تشکیل شده‌است و امکان ذخیره سازی آن بر روی هاردهای سریعی مانند SSD Driveها میسر است. این فایل، ساختاری را همانند page file، در سیستم عامل ویندوز دارد. در این حالت بجای اضافه کردن RAM بیشتر به سرور، یک Extension File را می‌توان بکار گرفت. هر زمان که Buffer Pool اصلی تحت فشار قرار گیرد (به میزان حافظه‌ای بیش از حافظه‌ی فیزیکی سرور نیاز باشد)، از این افزونه‌ی فایلی استفاده خواهد شد.
اطلاعات جزئیات Buffer Pool را توسط کوئری ذیل می‌توان بدست آورد:
 Select * from sys.dm_os_buffer_descriptors


نحوه‌ی فعال سازی و تنظیم Buffer Pool Extensions

قبل از هر کاری بهتر است وضعیت افزونه‌ی Buffer pool را بررسی کرد:
 select * from sys.dm_os_buffer_pool_extension_configuration


همانطور که ملاحظه می‌کنید، در حالت پیش فرض غیرفعال است.
سپس یک فایل یک گیگابایتی را به عنوان افزونه‌ی Buffer pool ایجاد می‌کنیم.
 ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION ON
 (FILENAME = 'd:\BufferPoolExt.BPE', SIZE = 1GB);
توصیه شده‌است که این فایل را در یک درایور پر سرعت SSD قرار دهید؛ ولی محدودیتی از لحاظ محل قرارگیری ندارد (هر چند به نظر فقط در حالتیکه از SSD Drive استفاده شود واقعا کار می‌کند).
اینبار اگر کوئری اول را اجرا کنیم، چنین خروجی قابل مشاهده است:


این فایل به صورت خودکار در حین ری‌استارت یا خاموش شدن سرور، حذف شده و با راه اندازی مجدد آن، باز تولید خواهد شد.


تغییر اندازه‌ی افزونه‌ی Buffer pool

اگر سعی کنیم، یک گیگابایت را مثلا به 10 گیگابایت افزایش دهیم:
 ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION ON
 (FILENAME = 'd:\BufferPoolExt.BPE', SIZE = 10GB);
با خطای ذیل مواجه خواهیم شد:
 Could not change the value of the 'BPoolExtensionPath' property
برای رفع این مشکل، ابتدا باید افزونه‌ی Buffer pool را غیرفعال کرد:
 ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION OFF
سپس می‌توان مجددا اندازه و یا مسیر دیگری را مشخص کرد. بهتر است اندازه‌ی این فایل را حدود 16 برابر حداکثر میزان حافظه‌ی سرور (Max Server Memory) تعیین کنید.
همچنین توصیه شده‌است که پس از غیرفعال کردن این افزونه، بهتر است یکبار instance جاری را ری استارت کنید.


چه زمانی بهتر است از افزونه‌ی Buffer pool استفاده شود؟
در محیط‌های read-heavy OLTP، استفاده از یک چنین افزونه‌ای می‌تواند میزان کارآیی و پاسخگویی سیستم را به شدت افزایش دهد (تا 50 درصد).


سؤال: آیا غیرفعال کردن افزونه‌ی Buffer pool سبب از دست رفتن اطلاعات می‌شود؟
خیر. BPE، تنها clean pages را در خود ذخیره می‌کند؛ یعنی تنها اطلاعاتی که Commit شده‌اند در آن حضور خواهند داشت و در این حالت حذف آن یا ری استارت کردن سرور، سبب از دست رفتن اطلاعات نخواهند شد.


برای مطالعه بیشتر

Buffer Pool Extension
SQL Server 2014 Buffer Pool Extensions
Do you require a SSD to use the Buffer Pool Extension feature in SQL Server 2014
Buffer Pool Extensions in SQL Server 2014
SQL Server 2014 – Buffer Pool Extension
مطالب
انجمن سایت LLBLGEN سورس باز شد

LLBLGEN یکی از ORM های تجاری بسیار با کیفیت دات نت است و علاوه بر اینکه هویت مستقلی دارد، امکان تولید کدهای مخصوص Entity framework و NHibernate را هم دارا است.
اخیرا این شرکت تصمیم گرفته است که سیستم پشتیبانی مشتریان خودش را که نمونه‌ای از آن‌را در اینجا می‌توانید ملاحظه کنید، سورس باز کند.
حداقل پیشنیازهای نصب این انجمن به شرح زیر است:
- ASP.NET 2.0+
- SQL Server 2000 or higher / CE Desktop 3.5
- NET 3.5+
لطفا جهت دریافت آن به این آدرس و جهت ملاحظه‌ی قابلیت‌های آن به این آدرس مراجعه نمائید.

مطالب
بازسازی msdb تخریب شده

حاصل قطع برق و یا یک ری استارت دستی ناصحیح را در نظر بگیرید:



Database 'msdb' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog for more information. (Microsoft SQL Server, Error: 926)

Msdb از نوع دیتابیس‌های سیستمی است و نمی‌شود مطابق روال متداول دیتابیس‌های SUSPECT شده آن‌را بازیابی کرد. این روش متداول به صورت زیر است:

ALTER DATABASE DBName SET EMERGENCY
DBCC checkdb('DBname')
ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('DBName', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE DBName SET MULTI_USER

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

اما دیتابیس سیستمی msdb را نمی‌شود در حالت اورژانسی قرار داد؛ بنابراین باید به دنبال راه چاره‌ی دیگری بود. پس از مدتی جستجو در وبلاگ‌های msdn ، راه حل زیر یافت شد و کاملا عملی است (تست شده!) :

روش زیر در مورد اس کیوال سرور 2008 ، 2005 و حتی 2000 نیز قابل استفاده است.
ابتدا خونسردی خودتان را حفظ کنید! الان فقط دیگر با management studio نمی‌توانید دیتابیس‌ها را مرور کنید و همچنین تمام job های تعریف شده شما نابود شده‌اند! اما سرور به کار عادی خودش می‌تواند ادامه دهد. سپس :
الف) تمام سرویس‌های مربوط به اس کیوال سرور را stop کنید. به کنسول سرویس‌ها مراجعه کرده و هر آنچه که در نام آن sql را مشاهده می‌کنید، stop کنید.
ب) با استفاده از خط فرمان، ابتدا به مسیر زیر وارد شوید:
cd "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\"

و سپس دستور زیر را اجرا نمائید:
start sqlservr.exe -c -m -T3608

به این ترتیب اس کیوال سرور در یک حالت حداقل که بتوان دیتابیس msdb تخریب شده را detach کرد راه اندازی می‌شود. (پرچم 3608 مجوز detach کردن این دیتابیس را می‌دهد)
ج) management studio را اجرا کنید. زمانیکه پنجره کانکت ظاهر می‌شود آن‌را کنسل کرده و در نوار ابزار بالای صفحه روی دکمه new query کیک کنید (چون حالت راه اندازی سرور در حالت تک کاربره است نمی‌خواهیم اتصال دیگری برقرار شود و در کار اخلال کند). با کلیک بر روی new query پنجره connect to server ظاهر می‌شود. در همین پنجره بر روی دکمه options کلیک کرده در برگه connection properties در قسمت connect to database نام master را وارد نمود و اکنون بر روی دکمه connect کلیک نمائید.
ج) سپس دستور زیر را وارد کنید تا دیتابیس msdb را بتوان detach کرد.
Use master;
sp_detach_db 'msdb'

مراحلی که عنوان شد مهم است. اگر به این صورت عمل نکنید با پیغام خطای زیر مواجه خواهید شد:
Cannot detach an opened database when the server is in minimally configured mode

اگر به این خطا برخوردید، یکبار دیگر از صفر شروع کنید. تمام سرویس‌های مرتبط با sql را استاپ کنید (حتی در صورت نیاز کارت شبکه سرور را نیز غیرفعال کنید). و از مرحله الف مجددا شروع نمائید تا حتما حالت تک کاربره‌ی اتصال برقرار شود. (همچنین پنجره‌ی کوئری جدیدی را نیز باز نکنید چون در این حالت فقط و فقط یک اتصال مجاز است)

تا اینجا موفق شدیدم که دیتابیس msdb را detach کنیم. اکنون به پوشه دیتابیس‌ها مراجعه کرده و mdf و ldf این دیتابیس تخریب شده را rename کنید (به هر اسمی که مایل بودید).
د) اکنون نوبت بازسازی مجدد این دیتابیس است.
محتویات فایل instmsdb.sql را که در مسیر C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\install قرار دارد، در پنجره‌ی کوئری تک کاربره‌ای که در مرحله قبل بازکرده‌ایم، copy/paste کرده و دکمه F5 را فشار دهید. پس از مدتی دیتابیس msdb باز سازی شده و مشکل برطرف می‌شود.
ه) اکنون سرور را stop و start کنید یا کلا کامپیوتر سرور را restart‌ کنید تا تمامی سرویس‌های stop شده راه اندازی مجدد شوند.


اشتراک‌ها
رهانش ASP.NET Core updates in .NET 8 Preview 4

.NET 8 Preview 4 is now available and includes many great new improvements to ASP.NET Core.


Here’s a summary of what’s new in this preview release:


Blazor

Streaming rendering with Blazor components

Handling form posts with Blazor SSR

Route to named elements in Blazor

Webcil packaging for Blazor WebAssembly apps

API authoring

Expanded support for form binding in minimal APIs

API project template includes .http file

Native AOT

Logging and exception handling in compile-time generated minimal APIs

ASP.NET Core top-level APIs annotated for trim warnings

Reduced app size with configurable HTTPS support

Worker Service template updates

Additional default services configured in the slim builder

API template JSON configuration changes

Support for JSON serialization of compiler-generated IAsyncEnumerable unspeakable types

Authentication and authorization

Identity API endpoints

Improved support for custom authorization policies with IAuthorizationRequirementData

ASP.NET Core metrics

For more details on the ASP.NET Core work planned for .NET 8 see the full ASP.NET Core roadmap for .NET 8 on GitHub. 

رهانش ASP.NET Core updates in .NET 8 Preview 4
نظرات اشتراک‌ها
درس خوندن، ارزشش رو داره؟
بنظرم گزینه اول واقعا نسبت به بقیه مهم‌تر هست. ما در روند معمول خیلی چیزها رو به دلایل عدم علاقه و زمان دنبال نمیکنیم و طبیعتا با ندونستن اونها در مواقع نیاز، نمی‌فهمیم که چه چیزی رو از دست دادیم و شاید هیچ وقت هم بعدا نفهمیم. گاهی اوقات دانستن یک مساله‌ی تئوریک حتی در حد خیلی کلی، کمک بسیاری به تصمیم گیری درست میکنه.
مشابه اون رو در عالم برنامه نویسی زیاد داریم. دوست برنامه نویسی داشتم که یک پروژه نسبتا حجیم با تیم چند نفره رو داشتن جلو می‌بردن و هیشکدوم حتی خبر از وجود سیستم asp.net membership برای احراز هویت و امنیت نداشتند! تصور کنید که چه حجم کد و البته پر از باگ رو می‌خواستند خودشون انجام بدن ...
نظرات مطالب
روش‌هایی برای بهبود قابلیت دیباگ بسته‌های NuGet
محدودیت با مخزن  خصوصی  گیتلب (Gitlab  Private   Repository):
در حال حاضر این روش با مخازن خصوصی گیتلب بدلیل تفاوت نحوه احراز هویت گیتلب با دیگر CodeHosting‌ها سازگار نیست. و به هنگام دیباگ به جای فایل مورد نظر، صفحه لاگین را برمیگرداند Issue #281 
یک راه حل برای ویژوال استودیو 2019: ایجاد Session برای گیتلب توسط مرورگر داخلی ویژوال استودیو
از طریق View -> Other Windows -> Web Browser به گیتلب خود لاگین کنید.
راه حل برای Gitlab Self-Hosted:
نظرات مطالب
اعمال کنترل دسترسی پویا در پروژه‌های ASP.NET Core با استفاده از AuthorizationPolicyProvider سفارشی
جهت اطلاع
به عنوان راهکاری جهت کاهش حجم کوکی/توکن احراز هویت، امکان PackedPermission اضافه شد.
سوال: بدون نگهداری لیست دسترسی‌های پویای کاربر در کوکی/توکن، بازهم امکان استفاده از این زیرساخت را خواهیم داشت؟
بله؛ اگر قصد استفاده از مکانیزم PackedPermission را ندارید، با بازطراحی انجام شده و به دلیل عدم فراخوانی context.Fail()‎ در هندلر پیش فرض، امکان پیاده سازی AuthorizationHandler متناظر با PermissionAuthorizationRequriment را خواهید داشت که می‎تواند مستقیم از بانک اطلاعاتی نیز بررسی دسترسی به منابع مورد نظر را انجام دهد.

claims.Add(new Claim(UserClaimTypes.PackedPermission,
    new[] {"48", "65", "6C", "6C", "6F", "20", "57", "6F", "72", "6C", "64", "21"}
        .PackPermissionsToString()));

نظرات مطالب
اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity
در متن مقاله فرمودین : 
اگر متد AddAuthentication، مانند تنظیمات فوق به همراه این تنظیمات پیش‌فرض بود،
خواستم ببینم اگر به طور مثال این تنظیمات :
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
لحاظ شوند و از سیستم Asp.net core Identity که در این مقاله سفارشی سازی ASP.NET Core Identity  توضیح دادین در کنار این روش استفاده گردد آیا تنظیمات بالا، برای بحث احراز هویت بصورت پیش فرض قرار میگیره و سیستم Identity مذکور دیگه از کوکی استفاده نمیکنه؟
و آیا دیگه احتیاجی به ذکر این مورد در فیلتر authorize هست ؟ 
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]