‫۲ سال و ۲ ماه قبل، سه‌شنبه ۳۱ خرداد ۱۴۰۱، ساعت ۱۹:۴۴
بیشتر برای مرور راحت‌تر کدهاست. همه اعضای تیم مانیتورهای بزرگ ندارن و گاها پیش میاد که روی سیستم یه نفر دیگه داریم کدها رو مرور میکنیم که یه مانیتور داره (مانیتور خود لپ تاپ مثلا) و عملا باید هی صفحه رو اسکرول کنه تا متوجه بشیم چی نوشته (چون مانیتور نفر قبلی بزرگ بوده). و یا موقع مرج کردن دو تا برنچ خیلی این مورد میتونه کمک کنه. 
قابلیت word wrap که روی همه سیستم هاهم فعال باشه، اگه روی گیتلب کدهارو ریویو کنیم بازم باید اسکرول کنیم چون از طریق مرورگر داریم کدها رو مرور میکنم نه در Visual Studio.
در کل من خودم از این افزونه برای این مورد استفاده میکنم که اگه کدهام قراره تو هرجایی مرور بشه کمترین اسکرول رو داشته باشم.
‫۳ سال و ۲ ماه قبل، پنجشنبه ۲۰ خرداد ۱۴۰۰، ساعت ۱۴:۵۰
نکته تکمیلی:
به دلیل اینکه خروجی متد PushProperty از نوع IDisposable میباشد, برای اضافه کردن آیدی و آی پی کاربر باید به صورت زیر عمل کنیم: 
app.Use(async (httpContext, next) =>
{
    //Get username
    var username = httpContext.User.Identity.IsAuthenticated ? httpContext.User.Identity.Name : "anonymous";
    using (LogContext.PushProperty("User", username))
    {
        //Get remote IP address
        var ip = httpContext.Connection.RemoteIpAddress.ToString();
        using (LogContext.PushProperty("IP", !String.IsNullOrWhiteSpace(ip) ? ip : "unknown"))
        {
            await next.Invoke();
        }
    }
});
در مطلب ارسال شده, استفاده از using برای ثبت آیدی و آی پی کاربر, فراموش شده بود.
‫۳ سال و ۳ ماه قبل، سه‌شنبه ۴ خرداد ۱۴۰۰، ساعت ۲۱:۰۲
خواهش میکنم.
مطلب درباره RabbitMq بود و در مورد Reverse proxy روی IIS  اطلاعی ندارم. 
‫۳ سال و ۳ ماه قبل، دوشنبه ۳ خرداد ۱۴۰۰، ساعت ۱۹:۲۴
نکته تکمیلی :
میتوانید با استفاده از متد BasicQos حداکثر تعداد داده‌های ارسالی به Consumer هارا مشخص کنید.
 برای مثال اگر از طرف Consumer متد BasicAck رو صدا نزنید و به RabbitMq اعلام نکنید که داده به Consumer رسیده است, داده‌ها در RabbitMq باقی خواهند ماند.( در این حالت هر داده جدیدی در RabbitMq وارد شود به Consumer ارسال میشود اما هیچ داده ای پاک نمیشود).
 اما میتوانیم با استفاده از متد BasicQos تعداد داده‌های دریافتی را مشخص کنیم.
برای مثال در کد زیر حداکثر 16 داده به Consumer ارسال میشود. یعنی اگر Consumer که  16 داده را دریافت کرده, ack را به RabbitMq ارسال نکنند, هیچ داده دیگری به Consumer ارسال نمیشود تا زمانی ack مربوط به داده‌های قبلی به RabbitMq ارسال شود.
_model.BasicQos(0, 16, true);
این متد را میتوانید بعد از متد QueueBind در هنگام تعریف Consumer مربوط به Queue اضافه کنید.
‫۳ سال و ۳ ماه قبل، دوشنبه ۲۷ اردیبهشت ۱۴۰۰، ساعت ۱۹:۵۷
نکته تکمیلی:
در هنگفایر برای اجرای تسکها, هر 15 ثانیه یکبار زمان آنها چک میشود. به طور مثال اگه تسکی دارید که نیاز دارد هر 4 ثانیه یکبار اجرا شود باید مقدار پیشفرض SchedulePollingInterval که برابر با 15 است  را تغییر دهید:
services.AddHangfireServer(option =>
{
    option.SchedulePollingInterval = TimeSpan.FromSeconds(4);
});
در غیر این صورت هر 15 ثانیه یکبار تسک شما اجرا میشود به جای 4 ثانیه.
‫۳ سال و ۴ ماه قبل، یکشنبه ۲۲ فروردین ۱۴۰۰، ساعت ۱۴:۳۷
اگر پروژه به صورت InProcess بر روی IIS اجرا شود باید از UseIIS استفاده کنیم. در Asp.Net Core 2.2
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseApplicationInsights()
        .UseStartup<Startup>()
        .UseIIS();
اما اگر پروژه به صورت OutOfProcess باشد باید از UseIISIntegration استفاده کنیم.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseApplicationInsights()
        .UseStartup<Startup>()
        .UseIISIntegration();

‫۳ سال و ۵ ماه قبل، پنجشنبه ۱۹ فروردین ۱۴۰۰، ساعت ۰۳:۰۱
اگر دیتاها به صورت فشرده شده ("gzip, deflate") دریافت شوند, باید تنظیمات مربوط به Decompress کردن دیتاها را به HttpClient اضافه کنیم.
services.AddHttpClient("GitHub", a =>
 {
     a.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
 }).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
 {
     AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
 });
همچنین اگر بخواهیم از پروکسی برای ارسال ریکوست‌ها استفاده کنیم, میتوان تنظیمات زیر را به HttpClient اضافه کنیم.
services.AddHttpClient("Github", a =>
 {
     a.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
 }).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
 {
     Proxy = new WebProxy("192.168.20.21", 3128),
     UseProxy = true
 });

‫۳ سال و ۷ ماه قبل، یکشنبه ۲۸ دی ۱۳۹۹، ساعت ۰۱:۰۶
سلام خواهش میکنم
 ممنون بابت نظرتون.

  در اولین اجرا خطای منسوب به دیتا تایپ‌ها رو میده مثلا میده فلان اپراتور برای نوع داده خاص هست و غیر از اون نمیشه استفاده کرد.

برای این پیغام خطایی که فرستادید باید از سمت فرانت‏ اند رعایت بشه که به عنوان مثال کاربر نتونه از عملگر "<" برای رشته‌ها استفاده کنه. اگه با گرید کندو کار کرده باشید, همین کار در سمت فرانت اند هندل شده و برای هر دیتاتایپی یکسری شرط هارو میتونید اعمال کنید. به عنوان مثال برای رشته‌ها میتونید از شرط هایی مثل شامل میباشد, شامل نمیباشد, خاتمه می‌یاید و ... استفاده کنید و برای دیتاهای عددی میتونید از کوچکتر از, بزرگتر از, برابر و... استفاده کنید.
البته میشه از عملگر "<" برای رشته‌ها هم استفاده کنیم که یک متد جدا برای نوع رشته ایجاد کنیم و اگه نوع پراپرتی مدل ما رشته بود و مقایسه رو طبق متد نوشته شده ما انجام بده. 

برای مثال در کد زیر   آقای حامد فتحی با استفاده از MakeBinary یک متد برای شرط IsNullOrEmpty نوشتن توی گیتهاب پروژه
case ComparisonMethod.IsNullOrEmpty:
     MethodInfo method = typeof(DynamicQueryExtensions).GetMethod(nameof(DynamicQueryIsNullOrEmpty), BindingFlags.NonPublic | BindingFlags.Static);
     return Expression.MakeBinary(ExpressionType.Equal, memberExpression, constantExpression, false, method);
private static bool DynamicQueryIsNullOrEmpty(object source, object value)
{
    if (source is string)
    {
        return string.IsNullOrEmpty(source?.ToString());
    }

    if (source is Array)
    {
        return source == null || ((Array)source).Length == 0;
    }

    if (source is IEnumerable)
    {
        return source == null || ((IEnumerable<object>)source).Count() == 0;
    }
    return false;
}

در کد بالا عمل IsNullOrEmpty رو برای رشته‌ها به یه صورت انجام میده و برای آرایه‌ها به یه صورت دیگه. فک کنم با این روش بتونید جلوی خطاهای مربوط به  دیتاتایپ هارو بگیرید و اگه مشکلی رو حل کردید ممنون میشم به اشتراکش بزارید.