PDA

View Full Version : سوال: چطور می شه با کلمات ساده کاربورد Owin و Katana رو توضیح داد؟



Black_Hammer
شنبه 13 آذر 1395, 18:44 عصر
سلام
من مقالات زیادی در باره Owin و Katana خوندم اما مفهوم اون رو متوجه نشدم و تصویری از کاربورد اون رو توی ذهنم ندارم.

برای یک توسعه دهنده متوسط وب که از asp.net mvc استفاده می کنه :

1_ owin دقیقا چی هست و چه مشکلاتی رو حل می کنه (((لطفا با کلمات ساده بیان بشه))). و چه رابطه ای با IIS داره؟
2_ آیا Owin با IIS جایگزین شده؟ اگه نه در چه شرایطی owin بهترین جایگزینه ؟؟؟
3_چطور Owin توی پروژه های روزانه من کمکم می کنه؟
4_ کی باید از Owin استفاده کنم؟

((((((((((((("""""""""""""":متعجب:فقط خداییش لینک نفرستید و خودتون توضیح بدید. :عصبانی++:پوستم کنده شد انقدر توی وب گشتم:متعجب:"""""""""""""""))))))))))))))))))))))))))

Maryam_1368
یک شنبه 14 آذر 1395, 08:56 صبح
سلام..راستش من خودم هم خیلی لینک خوندم و گیج شدم..اصلا کاربرد این owin واسه چی هست

یه لینکی بود که بهتر از بقیه توضیح داده بود که خوب بازم برام کلی سوال پیش اومد..
http://tektutorialshub.com/owin/

مثلا وقتی میگن برنامه های asp.net به IIS وابسته هستن..شاید این جمله رو خیلی شنیده باشی..اما معنیش چی میشه؟
من از یه نفر پرسیدم اونم با مثال جواب من رو داد..گفت فرض کن یه برنامه نوشتی دادی دست مشتری..وقتی داره ازش استفاده میکنه شما IIS رو Restart میکنی..
حالا این Restart کردن IIS چطور اتفاق میوفته؟ مثلا فقط کافیه فایل وب کانفیگ رو یه بار روی هاست آپلود کنی و جایگزین فایل قبلی کنی..این باعث میشه IIS شما Restart بشه(مثلا فرض کن برنامه نویس میخاد توی فایل وب کانفیگ یه تغییر بده و اون رو بفرسته روی هاست)
حالا که این اتفاق افتاد برنامه ی شما هم Restart میشه یعنی کاربرانی که لاگین هستن اتوماتیک Logout میشن..
یا مثلا وقتی شما یه سایت دارین که از تصاویر استاتیک استفاده کردین و تصاویر توی مرورگرهای کاربران کش کرده، شما اون تصاویر رو عوض کنید کاربر باید ctrl+f5 بزنه
اصلا چرا راه دور بریم...همین فایل های سی اس اس..اگه تغییر بدین ، کاربرانی که قبلا سایت رو باز کردن باید ctrl+f5 بزنن تا فایل های جدید از سرور بارگزاری بشه..اما با restart کردن IIS دیگه نیازی به این کار نیست
چون که برنامه از نو راه اندازی میشه و خود به خود میره همه چیز رو از سرور میخونه..

همه این هارو توضیح دادم که بگم منظور از وابستگی برنامه های دات نت به IIS یعنی چی..

یه چیز دیکه ای که وجود داره اینه که در ورژن های قدیمی asp یه فضای نام داشتیم به اسم system.web که این مورد وابسته بود به همون IIS که بالا توضیح دادم.
حالا اومدن با OWIN این لایه رو برداشتن که این گره خوردگی از بین بره..
یه چیز دیگه هم من ازش فهمیدم اینه که با OWIN میتونی از جاهای دیگه هم کاربر رو ثبت نام و لاگین کنی..مثل اکانت Gmail , facebook و...
این وسط گویا باید از Owin استفاده کنی..

تمام اینهایی که گفتم ممکنه درست باشه یا غلط اما چون خود من هم مشکل داشتم درباره این موضوع این پاسخ رو دادم که دوستان حرفه ای تر بیان و توضیحات تکمیلی و بهتر بدن.

hakim22
یک شنبه 14 آذر 1395, 16:21 عصر
اول اینکه OWIN یک استاندارد است. مجموعه ای قوانین و مقررات که در این سایت می توانید مطالعه کنید : http://owin.org


کاتانا پیاده سازی این استاندارد توسط مایکروسافته . که فضای نامیش میشه Microsoft.OWIN


هدف از Owin جدا کردن سرور از برنامه ی تحت وب است. شما می توانید با استفاده از Owin بدون نیاز به IIS درخواست های Http را بخوانید و به آن پاسخ دهید.
قبلا باید درخواستها را فقط از IIS دریافت می کردید. IIS ابزار و امکانات زیادی داره ولی همیشه بهترین گزینه نیست. الان این امکان رو دارید که در دات نت یک فریم ورک جایگزین برای ASP MVC بنویسید که سبکه و هیچ نیازی هم به IIS نداره. (مشابه فریم ورک Web Api یا SignalR)



OWIN میتونه قبل از اینکه درخواست بهASPبرسه اونو بخونه و روش تغییراتی اعمال کنه. مثلا سیستم Identity از OWIN برای تشخیص هویت کاربرها استفاده میکنه. اطلاعات کاربر در کوکی مرورگر ذخیره میشه و در اونجا رمز گذاری شده. اطلاعات کوکی با هر درخواست به سرور ارسال میشه. حالا Identity با استفاده از یک Middle-ware در مسیر هر درخواست قرار میگیره و بعد از رمز گشایی از اطلاعات کوکی چک میکنه که آیا بر اساس Role ها امکان دسترسی کاربر به بخش مربوطه وجود داره یا نه.

کاربرد OWIN برای برنامه نویسان حرفه ای است . کسانی که فریم ورک تولید می کنند یا ابزارهای جانبی مانند SignalR پیاده می کنند. برای کارهای روزانه نیازی به پیاده سازی OWIN ندارید و کاربردی هم برای شما ندارد. در ASP Core همه چیز از طریق Middle-ware ها فعال میشود به همین دلیل کار کردن با OWIN اهمیت زیادی پیدا میکند. (ولی باز هم نیاز به دانش پیاده سازی آنها ندارید.) شما در 90 موارد بجای پیاده سازی Middle-ware از همان اکشن فیلترهای ASP MVC استفاده خواهید کرد و نیاز شما را برطرف میکند.




مثلا وقتی میگن برنامه های asp.net به IIS وابسته هستن..شاید این جمله رو خیلی شنیده باشی..اما معنیش چی میشه؟
من از یه نفر پرسیدم اونم با مثال جواب من رو داد..گفت فرض کن یه برنامه نوشتی دادی دست مشتری..وقتی داره ازش استفاده میکنه شما IIS رو Restart میکنی..
حالا این Restart کردن IIS چطور اتفاق میوفته؟ مثلا فقط کافیه فایل وب کانفیگ رو یه بار روی هاست آپلود کنی و جایگزین فایل قبلی کنی..این باعث میشه IIS شما Restart بشه(مثلا فرض کن برنامه نویس میخاد توی فایل وب کانفیگ یه تغییر بده و اون رو بفرسته روی هاست)
حالا که این اتفاق افتاد برنامه ی شما هم Restart میشه یعنی کاربرانی که لاگین هستن اتوماتیک Logout میشن..
یا مثلا وقتی شما یه سایت دارین که از تصاویر استاتیک استفاده کردین و تصاویر توی مرورگرهای کاربران کش کرده، شما اون تصاویر رو عوض کنید کاربر باید ctrl+f5 بزنه
اصلا چرا راه دور بریم...همین فایل های سی اس اس..اگه تغییر بدین ، کاربرانی که قبلا سایت رو باز کردن باید ctrl+f5 بزنن تا فایل های جدید از سرور بارگزاری بشه..اما با restart کردن IIS دیگه نیازی به این کار نیست
چون که برنامه از نو راه اندازی میشه و خود به خود میره همه چیز رو از سرور میخونه..


حذف وابستگی به IIS بحث دیگری داره. یعنی اینکه شما اصلا نیازی به نصب IIS در سیستم نداشته باشید. ممکنه شما یک برنامه ی کنسول مینویسید که قراره ساعت جاری سرور رو به صورت یک وب سرویس ارائه میده. برنامه ی شما هم از Web Api استفاده میکنه. نیازی ندارید که روی IIS سایت درست کنید و درگیر همه ی فیلترها و ماژول های اون بشید. می توانید با OWIN خود اون برنامه رو به یک هاست و سرور تبدیل کنید. از اونجایی که Web Api اصلا با System.web.dll کار نمیکنه این کار ممکنه.

با ریستارت شدن IIS هم نیاز به استفاده از Ctrl+F5 برای مشاهده ی فایلهای استاتیک هست. این فایلها در مرورگر کاربر کش میشن نه در سرور و تا زمانی که نام فایل تغییر نکرده مجدد از سرور بارگذای نمیشن.




یه چیز دیگه هم من ازش فهمیدم اینه که با OWIN میتونی از جاهای دیگه هم کاربر رو ثبت نام و لاگین کنی..مثل اکانت Gmail , facebook و...
این وسط گویا باید از Owin استفاده کنی..


این هم به همان دلیل رمز گذاری و چک کردن هویت از سرورهای فرعیه. مایکروسافت یک OWIN برای چک کردن حسابهای کاربری خارجی مخصوص Identity تهیه کرده. خوبیه OWIN اینه که میتوانید انتخاب کنید از کدام Middle-ware استفاده می کنید و از کدام Middle-ware استفاده نمی کنید. دیگر مجبور نیستید از همه چیز یا هیچ چیز استفاده کنید. مثلا اگر فقط نیاز به حساب های گوگل دارید فقط این بخش را در اوین روشن می کنید.

همانطور که توضیح داده شد کاربرد OWIN در کارهای روزانه نیست و عملا شما از آن استفاده نخواهید کرد.
به نظرم بهترین راه درک کاربرد OWIN پیاده سازی یک Middle-ware ساده است.
همینطور پیشنهاد میکنم آموزشهای ASP Core را مطالعه کنید و از نزدیک شاهد کاربردهای OWIN و Middle-ware ها خواهید بود.
پیشنهاد دیگری که شاید خیلی جالب باشد تست یک برنامه ی Hello word در Node.js است.

Black_Hammer
یک شنبه 14 آذر 1395, 19:36 عصر
کاربرد OWIN برای برنامه نویسان حرفه ای است . کسانی که فریم ورک تولید می کنند یا ابزارهای جانبی مانند SignalR پیاده می کنند. برای کارهای روزانه نیازی به پیاده سازی OWIN ندارید و کاربردی هم برای شما ندارد. در ASP Core همه چیز از طریق Middle-ware ها فعال میشود به همین دلیل کار کردن با OWIN اهمیت زیادی پیدا میکند. (ولی باز هم نیاز به دانش پیاده سازی آنها ندارید.) شما در 90 موارد بجای پیاده سازی Middle-ware از همان اکشن فیلترهای ASP MVC استفاده خواهید کرد و نیاز شما را برطرف میکند.


خیلی ممنون از راهنمایی تون

شما گفتین که Owin فقط به درد برنامه نویس ها حرفه ای که دارن فریم ورک طراحی مکنن میخوره و برای ما کاربورد نداره .یک سوال ما از Identity استفاده می کنیم و Identity هم از Owin استفاده می کنه حالا چطور ما باید چطور از Owin توی Identity استفاده کنیم؟

hakim22
یک شنبه 14 آذر 1395, 21:12 عصر
شما لازم نیست کار خاصی روی owin مربوط به Identity انجام بدید. بعد از اضافه کردن Identity به پروژه خودش تنظیمات رو انجام میده. ضمن اینکه منظور من پیاده سازی با OWIN بود و نه کار کردن با اون.

کار کردن هم فقط در حد فراخوانی یک آیتم در startup هست و دیگه چیز بیشتری نیاز ندارید. حتی در ASP Core که همه چیز باید با OWIN فراخوانی بشه شما فقط باید دستور فراخوانی رو بدونید. غیر از این کاری با OWIN ها ندارید.

Black_Hammer
دوشنبه 15 آذر 1395, 07:57 صبح
خیلی ممنون از راهنمایی تون یک سوال دیگه داشتم. با این Owin روی سرعت بارگزاری برنامه ها وب هم می تونیم تاثیر بزاریم و میتونه باعث بشه که برنامه ها سریع تر لود بشن؟ اگه جوابتون بله هست می شه بفرمایید که چطور این طور شده.

و اینکه حالا وقتی ما قراره از iis استفاده نکنیم پس چطور برنامه های خودمون رو منتشر کینم

hakim22
دوشنبه 15 آذر 1395, 14:11 عصر
خب شما اگر نگاهی به HttpContext در ASP MVC بندازید حجم بالای اطلاعاتی که در هر درخواست از طرف IIS جمع آوری میشه و به شما ارسال میشه رو خواهید دید.
مثلا همیشه IIS در درخواست فایلهای آپلود شده رو هم بررسی میکنه ، شما در چند درخواست فایل هم ارسال می کنید ؟
خیلی سایتها هست که وب سرویس هستن و اصلا فایل استاتیک خروجی نمیدن ولی در IIS همیشه این موارد در Response چک میشه.
همین قضیه برای کوکی ها و سشن ها و فشرده سازی و... هم صدق میکنه.

مشکل IIS اینه که با System.web.dll کار میکنه و شما باید همه چیز رو بگیرید یا هیچ چیز رو نگیرید. راهی برای انتخاب اینکه کدام قسمت از اطلاعات دریافتی از شبکه به درد شما میخوره ندارید.

اگر شما ASP Core رو بررسی کنید یا یک نمونه پروژه با Node.js انجام بدید کاملا متوجه سبکتر شدن درخواست می شوید. در این دو برای دریافت هر نوع اطلاعات باید سرویس مورد نظرش رو فراخوانی کنید.

مثلا در ASP Core فایلهای استاتیک مانند عکسها و CSS ها و ... به طور پیشفرض به کاربر برگردانده نمیشوند.



public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseStatusCodePages();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseStaticFiles();
app.UseIdentity();
app.UseExceptionHandler();
app.UseMvc(RouteConfig.Register);

}


متد بالا در ASP Core نقطه ی شروع پروژه است. می بینید که مثلا برای نمایش خطاهای دیتابیس باید یک Middle-ware با نام UseDatabaseErrorPage استفاده کنید. یا جهت نمایش فایلهای استاتیک باید UserStaticFiles رو فراخوانی کنید. همینطور برای خطایابی هم ماژول UseExceptionHandler باید لود بشه.

حتی خود ASP MVC هم یک Middle-ware هست و باید فراخوانی بشه وگرنه کنترلرها و ویوهاشون کار نمیکنن و روتینگ وجود نخواهد داشت.
نکته دیگه اینکه در نسخه ی جدید تمامی درخواستهای ارسالی به IIS از طریق HttpPlatformHandler مستقیما به وب سرور هایی Kestrel یا WebListner منتقل میشه.

با توجه به سبک کردن وظایف ابزاری مانند Kestrel سرعت خیلی بیشتر شده . مثلا برای یک درخواست PlainText ارسالی به سرور در تست سرعت نتایج به این شکله :

ASP.NET 5 Kestrel: 1,188,521 requests per second
ASP.NET 4.6 IIS: 57,792 request per second

(نتایج تا ماه نوابر 2016)

با توجه به یکسان بودن سرورها عدد یک میلیون درخواست با 57 هزارتا اصلا قابل مقایسه نیست.



و اینکه حالا وقتی ما قراره از iis استفاده نکنیم پس چطور برنامه های خودمون رو منتشر کینم


روشها در اینترنت هست ولی عملا تا زمانی که از ASP MVC استفاده میکنید بهترین راه همون IIS می باشد.