filterContext.HttpContext.Request.Unvalidated[key]
من تنظیمات مورد نظر انجام دادم. اما زمانی که درخواستی مثل http://store1.localhost:61386 با خطای زیر مواجه میشم. در واقع اصلا کنترل به برنامه من نمیرسه.
Bad Request - Invalid Hostname HTTP Error 400. The request hostname is invalid.
EF Code First #12
بعد از ExpressProfiler استفاده کردم و نتیجه اینطور بود :
بعد از هر دستوری sp_reset_connection اجرا میشه. من فکر میکردم Context Per Request به معنای یک کانکشن باز در طول درخواست هست ولی ظاهرا اینطور نیست.
آموزش LightInject IoC Container - قسمت 1
SignalR - قسمت دوم
با توجه به تصویر بالا SignalR در شرایط موجود بهترین روش برای برقراری ارتباط با سرور رو forever frame تشخیص داده و مشاهده میشه که این ارتباط دائمیه و فعلا نتیجهای از سمت سرور دریافت نکرده و ارتباط کاملا زنده است. البته اگر در این ابزار درباره درخواستهای ارسالی به سرور بیشتر جستجو بکنین اطلاعات بیشتری نصیبتون میشه که آوردنش اینجا بحث رو طولانی میکنه.
حالا برنامه رو در یه مرورگر دیگه که از html5 پشتیبانی میکنه اجرا کنین. مثلا نتیجه در گوگل کروم و ابزار توسعه اون به شکل زیره:
همونطور که میبینین در اینجا روش استفاده شده Server Sent Events هست.
در فایرفاکس هم با استفاده از ابزار محبوب firebug نتیجه مشابه کروم بدست میاد:
البته اگر علاقه زیادی به کندوکاو در جزئیات این درخواستها دارین (مثل خود من) چیزی بهتر از fiddler2 پیدا نمیشه. میتونین پس از ارسال یک متن دوباره این درخواستها رو مورد بررسی قرار بدین و ببینین که چیجوری کانالهای ارتباط پس از ارسال و دریافت دیتا قطع و برقرار میشه.
این نکته رو هم باید یادآور بشم که هرچند که این کتابخونه بهترین روش رو میتونه انتخاب کنه اما به برنامه نویس امکان تعیین صریح روش ارتباط رو هم میده. اگر به راهنماهای این کتابخونه سر بزنین میبینین که امکانات زیادی بهش اضافه شده و امکانات زیادی هم در آینده به اون اضافه میشه. امکاناتی از قبیل ارسال دادهها به یک کلاینت خاص و یا به گروهی خاص از کلاینتها، خصوصیسازی آدرس سرور و همچنین پشتیبانی از Cross Domain در آخرین نسخه، امکان استفاده از Reactive Extension (بلاگ)، بحث Self Hosting که امکان خیلی جالبیه و میتونه خیلی جاها یه عنوان یک راهحل سبک و سریع به کار بیاد، قابلیت فوق العاده در بایندینگ دادهها در سمت سرور و مخصوصا کلاینت، امکان تشخیص برقراری یا قطع ارتباط کلاینتها در سمت سرور، استفاده از امکانات این کتابخونه برای برقراری ارتباط با کلاینتها در خارج از فضای کلاسهای مشتق شده از دو کلاس پایه (Hub و PersistentConnection) و چند مورد دیگه تا نسخه جاری اضافه شدند.
درحال حاضر دارم روی یه برنامه چت با امکانات بیشتر کار میکنم که پس از آماده شدن ارائه میدمش. یکی از پروژههای متن بازی که با استفاده از این کتابخونه توسعه داده شده jabbr.net است. یه اتاق گفتگوی کامل با امکانات جالبه که میتونین به اون هم یه سری بزنین.
در آخر هم یه لینک جالب برای مطالعه معرفی میکنم: Highest voted Signalr Questions - stackoverflow
حالا چطور و چگونه ازش استفاده کنیم؟!
این Extension کارش این است، وقتی HttpClient ما مقدار دهی شده و آمادهی برای ارسال درخواست به سرویس بیرونی است، میتوانیم قبل ارسال، آن را فراخوانی کنیم و یک خروجی Curl از درخواستی را که داریم میفرستیم، ببینیم. سپس خروجی Curl را در ترمینال صدا بزنیم و نتیجه را ببینیم. همینطور میتوانیم به Postman خود Import کنیم و با داکیومنتی که داده شده، بررسی کنیم و مشکل را دقیقتر بررسی کنیم.
نحوه Import کردن Curl در Postman
open the Postman -> click on the Import button -> select the Raw text tab -> paste the curl script here -> then press the Continue button -> at the end press the button import.
استفاده از این Extension بسیار ساده و سریع است و شما با نوشتن یک خط میتوانید آن را فراخوانی کنید:
این Extension سه(۳) راه برای نمایش Curl دارد:
۱- چاپ در Console
httpClient.GenerateCurlInConsole(httpRequestMessage, null);
httpClient.GenerateCurlInConsole( httpRequestMessage, configs => { configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; configs.EnableCodeBeautification = false; });
- با مقدارNeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
- مقدارEnableCodeBeautification اگر فعال باشد اسکریپتهای چاپ شده در Console را به ازای هر HttpMethod، با رنگ متفاوتی نشان میدهد؛ برای خوانایی بهتر اسکریپت. بصورت پیش فرض غیر فعال است.
۲- ذخیره در فایل
httpClient.GenerateCurlInFile(httpRequestMessage, null);
مثال و توضیحات کانفیگ به شرح زیر است:
httpClient.GenerateCurlInFile( httpRequestMessage, configs => { configs.Filename = "your filename"; configs.Path = "your path"; configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; });
- مقدارPath را میتوانید در صورت داشتن مسیری خاص، مشخص کنید. در غیر این صورت بصورت پیش فرض اطلاعات را در مسیر ProjectDirectory\bin\Debug\netX ذخیره میکند.
- مقدارTurnOn پیش فرض آن فعال است. درصورت غیرفعال کردن جنریتور غیر فعال میشود و عمل ایجاد اسکریپت را انجام نمیدهد.
- با مقدار NeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
۳- ذخیره در متغیر
httpClient.GenerateCurlInString(httpRequestMessage);
لینک آدرس GitHub پروژه جهت دیدن سورس پروژه و دیدن مثالهای بیشتر و همینطور برای دیدن قابلیتهای بیشتر این extension.
خوشحال میشوم اگه نظری دارید راجع به پروژه و یا مشکلی دیدید در سورس کد به من اطلاع بدهید و خیلی خوشحال میشوم اگر در تکمیل و پیاده سازی این پروژه مشارکت کنید و اگر این پروژه براتون جذاب و یا مفید بود استار بدهید.
At the Build 2016 conference, Microsoft announced the Microsoft Bot Framework, a package of tools for building intelligent bots that could be integrated with a variety of communication platforms. With Microsoft Bot Framework Succinctly, you can jump right into building your own bots with the framework, whether you want to make bots for personal use only, or customer-facing bots for your business. Author Ed Freitas provides clear guidance from setting up a bot project in Visual Studio and writing your first bare-bones bot, to publishing one capable of searching for current flight prices.
- Introduction
- Bot Framework Overview
- Our First Bot
- Publishing Our Bot
- The QPX Express API
- Airfare Alert Bot
<p align="left"> <a href="https://github.com/actions/setup-java"> <img alt="GitHub Actions status" src="https://github.com/actions/setup-java/workflows/Main%20workflow/badge.svg"> </a> </p>