OWIN یک Specification برای حذف وابستگی مستقیم بین برنامههای ASP.NET و Web Serverها است. این استاندارد را مایکروسافت به وجود آورده و بر اساس آن تکنولوژیهای مختلفی مثل Katana و Helios را نیز تولید کرده است. من سعی کردم یک پروژه ASP.NET را صرفاً بر اساس OWIN ایجاد کنم. این نوشته حاوی نکات و اطلاعاتی است که در انجام این کار با آنها برخورد کردم.
OWIN یک Abstraction بر فراز وب سرورها از جمله IIS است. OWIN کمک میکند که برنامههای ASP.NET بتوانند به راحتی با Web Serverهای دیگری غیر از IIS هم کار کنند. از این طریق میتوان برنامههای ASP.NET را خیلی راحتتر روی دیگر Web Serverها از جمله آپاچی و nginx و در دیگر سیستمعاملها و سختافزارها از جمله لینوکس، مک و Raspberry Pi سوار کرد. مایکروسافت تلاش زیادی میکند تا ASP.NET vNext به صورت Cross Platform در بیاید. در این راه رقابت سنگینی هم با امثال Node.js و Ruby دارد. یکی دیگر از اهداف OWIN و تکنولوژیهای مربوطه استفاده از سرورهای خیلی سبکتر از IIS است. البته نه این که IIS وب سرور بدی است و دیگر نباید از آن استفاده کرد بلکه موضوع این است که IIS دارای بخشهای خیلی زیادی است که خیلی وقتها ممکن است اصلاً مورد نیاز برنامه نباشد. پس شابد بهتر باشد وب سروری وجود داشته باشد که تنها شامل آن بخشهایی باشد که واقعاً توسط برنامه استفاده میشوند.
خیلیها در تلاش هستند تا وب سرورهای OWIN Compatible تولید کنند. خود مایکروسافت تا این لحظه (آگوست ۲۰۱۵) Katana و Helios را ارائه داده است. Katana به دو صورت قابل استفاده است. سوار بر IIS و اجرا به صورت مستقل در Process اختصاصی. در حالت اول همچنان از اسمبلی System.Web.dll استفاده میشود. در حالت دوم نیازی به IIS نیست ولی برنامه باید در چیزی مثل Windows Service اجرا شود. اسم package مربوط به Katana برابر Microsoft.Owin.Host.SystemWeb است. پروژه Helios هنوز در حالت آلفا است و نسخه نهایی آن احتمالاً همراه با ASP.NET 5 ارائه خواهد شد. این پروژه کمک میکند تا برنامه روی IIS سوار شود ولی مستقل از آن باشد. ضمناً خبری هم از System.Web.dll نخواهد بود. عدم استفاده از System.Web.dll به معنی Performance بالاتر میباشد. Microsoft.Owin.Host.IIS نام پکیج Helios است. خارج از مایکروسافت هم تلاشهایی برای تولید وب سرورهای OWIN Compatible در حال انجام است. برای کسب اطلاعات بیشتر اینجا را ببینید. مایکروسافت برای لینوکس هم Kestrel را تهیه کرده است.
بیشتر پیادهسازیها در حال حاضر متمرکز بر روی Web API هستند و فعلاً خبری از MVC و WebForm نیست. وقتی که یک برنامه ASP.NET کاملاً مبتنی بر OWIN باشد خبری از Global.asax نخواهد بود. به جای آن از کلاس Startup استفاده میشود. همه تنظیمات یک برنامه ASP.NET باید از طریق این کلاس انجام شود. حتی موارد سادهای مثل Serve کردن فایلهای استاتیک مثل عکسها و CSSها و غیره نیز باید در اینجا انجام شود. OWIN فعلاً در حال تکامل و تغییر است. پروژهها و مستندات آن مدام عوض یا deprecate میشوند. چند تا از منابع مطالعاتی خوبی که پیدا کردم این، این، این، این و این هستند.