مسیرراه‌ها
NoSQL
RavenDb
MongoDb در سی شارپ
بخش اول: عملیات درج و بازخوانی
بخش دوم: عملیات به روزرسانی، حذف و ایندکس گذاری
بخش سوم: ذخیره و بازیابی فایل
بخش چهارم :Chunk
بخش پنجم : پشتیبانی گیری و بازگردانی
بخش ششم: Import & Export
بخش هفتم : دیتاهای ایستا و پویا
بخش هشتم : الگوی Repository
اشتراک‌ها
با DotVVM، برنامه‌های ASP.NET Web Forms خود را بر فراز NET Core. اجرا کنید!

Did you know that DotVVM can be used to incrementally modernize old ASP.NET Web Forms applications and lift them to .NET Core? It is much easier than doing a full rewrite, and the application can be deployed at any time during the entire process.

  • Install DotVVM NuGet package in your Web Forms site
  • Create a DotVVM master page using the same CSS
  • Start converting ASPX pages to DotHTML syntax, one at a time
  • When all the Web Forms pages are gone, change your CSPROJ to use .NET Core 
با DotVVM، برنامه‌های ASP.NET Web Forms خود را بر فراز NET Core. اجرا کنید!
اشتراک‌ها
پشتیبانی همزمان از REST و gRPC در ASP.NET Core API
اکثر برنامه نویسان، به احتمال زیاد تاکنون API‌‌های خود را در قالب REST به مشتریان عرضه کرده اند و هم توسعه دهنده و هم خدمات گیرنده از سادگی استفاده از REST API راضی بوده اند. اما در نقطه ای از فرآیند توسعه خود، به جایی می‌رسیم که علاوه بر سادگی توسعه، Performance نقش پررنگی پیدا می‌کند بخصوص با افزایش تعداد Method‌های API و افزایش تعداد مشتریان، آنجاست که CPU سروری که API ما را هاست می‌کند، گاهی به سقف می‌چسبد، ترافیک شبکه به شدت افزایش می‌یابد و در پاسخ به اینکه آیا شما Go Client یا Python Client هم برای API خود دارید، پاسخی جز "خیر" نداریم. اینجاست که جستجو میکنیم و میبینیم راه‌های زیادی پیش روی ماست، یکی از این راه ها، که برای هر سه نیاز فوق پاسخ مناسبی می‌دهد، gRPC هست. نمونه ای عملیاتی از API ای که REST و gRPC را همزمان با هم پشتیبانی کند، در این مخزن گیت هاب  قرار داده ام که می‌توانید برای مقایسه Performance و حجم اطلاعات تبادل شده با هر دو روش از آن استفاده کنید. در این نمونه کد، با فراخوانی یک سرویس ساده، نتایج زیر به دست آمد:
  • سرعت اجرا (سرویس گیرنده): gRPC تقریبا 5 برابر سریعتر از REST پیام‌ها را دریافت کرد.
  • حجم دیتای انتقالی (سرویس گیرنده): حجم پیام‌های gRPC تقریبا نصف REST بود.
پشتیبانی همزمان از REST و gRPC در ASP.NET Core API
نظرات مطالب
شروع به کار با DNTFrameworkCore - قسمت 4 - پیاده‌سازی CRUD API موجودیت‌ها
بررسی شد، مشکلی یافت نشد. برای تست، پروژه DNTFrameworkCore.TestAPI را اجرا کرده و با ابزار Postman درخواست زیر را انجام دهید.

درخواست PUT (حذف Blogs_Edit، ویرایش Blogs_Create و افزودن Blogs_UseCase)
{
    "name": "Administrators",
    "description": "حذف گروه کاربری پیش فرض «مدیران سیستم» باعث ایجاد اختلال در کارکرد صحیح سیستم خواهد شد.",
    "permissions": [
        {
            "name": "Blogs_View1",
            "id": 1,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Edit",
            "id": 2,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Create",
            "id": 3,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_View",
            "id": 4,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Delete",
            "id": 5,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Edit",
            "id": 6,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Create",
            "id": 7,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Delete",
            "id": 8,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_View",
            "id": 9,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_Edit",
            "id": 10,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_Create",
            "id": 11,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_View",
            "id": 12,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_Delete",
            "id": 13,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_Create1",
            "id": 15,
            "trackingState": "Modified",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_UseCase",
            "trackingState": "Added"
        },
        {
            "name": "Blogs_Edit",
            "id": 14,
            "trackingState": "Deleted"
        },
    ],
    "rowVersion": "AAAAAAAAF3M=",
    "id": 1
}

پاسخ سرور:
{
    "name": "Administrators",
    "description": "حذف گروه کاربری پیش فرض «مدیران سیستم» باعث ایجاد اختلال در کارکرد صحیح سیستم خواهد شد.",
    "permissions": [
        {
            "name": "Blogs_View1",
            "id": 1,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Edit",
            "id": 2,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Create",
            "id": 3,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_View",
            "id": 4,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Delete",
            "id": 5,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Edit",
            "id": 6,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_Create",
            "id": 7,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Tasks_Delete",
            "id": 8,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Users_View",
            "id": 9,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_Edit",
            "id": 10,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_Create",
            "id": 11,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Roles_View",
            "id": 12,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_Delete",
            "id": 13,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_Create1",
            "id": 15,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        },
        {
            "name": "Blogs_UseCase",
            "id": 17,
            "trackingState": "Unchanged",
            "modifiedProperties": null
        }
    ],
    "rowVersion": "AAAAAAAAF3Q=",
    "id": 1
}

دقت کنید که خاصیت راهبری Permissions را در متد BuildFindQuery کلاس سرویس خود، Include کرده باشد.
نکته تکمیلی: در نسخه‌های جدید این زیرساخت، خصوصیت ModifiedProperties به کلاس TrackableEntity به عنوان کلاس پایه موجودیت‎‌هایی که نیاز به TrackingState دارند، اضافه شده است. اگر قصد دارید همه خصوصیات یک رکورد ویرایش شوند، این خصوصیت را با null مقداردهی کنید.