Kapan saya harus menggunakan OWIN Katana?

270

Saya baru mengenal OWIN dan Katana. Saya benar-benar tidak mengerti mengapa saya harus menggunakan OWIN, sementara saya bisa menggunakannya IIS. Sederhananya, pertanyaan saya adalah: Apa yang hilang jika saya tidak belajar OWIN dan menggunakan IIS untuk situs web saya?

Saya mencari di Google tetapi tidak ada penjelasan sederhana. Ada beberapa informasi di sini , tetapi mereka menggunakan beberapa frasa jargon jadi saya tidak bisa memahaminya.

Seyed Morteza Mousavi
sumber
2
Saya bertanya-tanya seberapa besar arah OWIN dipengaruhi oleh IOT. Tidak bisa benar-benar menempel IIS pada Arduino kan?
Sentinel

Jawaban:

279

Di asp.net WebApi v2, pipa OWIN menjadi default. Ini akhirnya akan menjadi pipa standar di bawah proyek asp.net apa pun.

Saya tidak bisa mengatakannya lebih baik daripada yang tertulis di sini: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

Bagian "Antarmuka Web Terbuka untuk .NET (OWIN)" menjelaskan dengan sempurna tujuan OWIN.

Tanpa OWIN, bit asp.net digabungkan dengan cara IIS berkomunikasi dengan aplikasi. OWIN mengabstraksi server web dan komponen framework. Itu berarti bahwa kode aplikasi Anda sekarang akan mengetahui antarmuka OWIN, tetapi bukan dari server web yang melayani permintaan.

Sebagai imbalannya, aplikasi dapat lebih mudah dipindahkan antara host dan berpotensi seluruh platform / sistem operasi. Misalnya, kemampuan untuk meng-host aplikasi di konsol atau proses apa pun memungkinkan Mono untuk menyimpannya tanpa upaya ... (Raspberry Pi siapa pun)

Aspek kedua adalah ia berfungsi sebagai saluran pipa.


Owin Pipeline


Anda dapat menyambungkan middlewares (dan sebanyak yang Anda inginkan) antara server web dan aplikasi Anda.
Ini memungkinkan lebih banyak solusi modular. Anda dapat mengembangkan middlewares yang dapat didistribusikan kembali yang dapat memengaruhi permintaan / tanggapan yang datang ke / dari aplikasi Anda, tetapi memisahkan modul-modul ini dari kode aplikasi.

Untuk meyakinkan diri Anda tentang manfaat dari pendekatan modular ini, lihatlah paket nuget yang tersedia untuk OWIN: http://www.nuget.org/packages?q=owin

Banyak dari paket-paket ini yang sebelumnya merupakan fungsi asp.net inti, dan telah diekstraksi sebagai middleware.
Misalnya, menambahkan dukungan untuk masuk menggunakan berbagai penyedia OAuth menjadi masalah infrastruktur (middleware) dan tidak perlu menjadi bagian dari kode aplikasi Anda lagi:

Atau jika Anda ingin mengganti semua gambar dari situs web Anda secara otomatis dengan gambar-gambar imut, Anda juga dapat melakukannya secara transparan:

https://github.com/serbrech/Owin.Catify

EDIT: Sekarang tersedia sebagai paket nuget : Owin.Catify !

Stéphane
sumber
Jawaban Anda pasti bagus karena terunggulkan, tetapi sulit bagi saya untuk mengetahuinya.
Seyed Morteza Mousavi
5
Bagaimana saya bisa membuatnya lebih baik? Apa yang tidak kamu mengerti?
Stéphane
1
Meskipun OWIN memang memiliki manfaat, tampaknya sulit untuk melakukan debug karena aliran eksekusi secara efektif akan 'melompat' dari middleware ke middleware. Masing-masing berpotensi mengubah respons di sepanjang jalan. Melampirkan debugger Visual Studio tampaknya tidak dapat mengikuti alur. Dan ketika pengecualian terjadi (pada aplikasi web), Anda hanya akan mendapatkan halaman kosong dengan 200 respons OK. Tidak ada kesalahan di mana pun selain dari log Acara Windows.
simbolo
7
Saya menemukan penjelasan di weblogs.asp.net/pglavich/owin-katana-and-getting-started berguna. Ini adalah cara untuk memisahkan aplikasi Anda dari IIS dan ketergantungan pada perakitan System.Web. Mengurangi jumlah komponen yang ada dalam pipa HTTP, sehingga menjaga aplikasi tetap ringan.
Terence
2
Saya perlu menambahkan bahwa di lingkungan saya saat ini, beberapa tim menggunakan WebApi dan beberapa menggunakan Nancy. Karena keduanya berada di atas OWIN, kami dapat berbagi middlewares seperti penanganan Api Key atau Stateless Authentication, terlepas dari framework. Kami membiarkan tim memilih yang paling cocok untuk mereka. Itulah manfaat sebenarnya dari OWIN.
Stéphane
209
public interface OWIN
{
   void ListenHttpCallAndServeWebPage();    
}

namespace Microsoft.OWIN
{
   public class Katana : OWIN
   {
      public void ListenHttpCallAndServeWebPage()
      {
         // listen to a port for HTTP call and serve web page
      } 
   }
}

Ya itu betul. OWIN adalah antarmuka dan Katana adalah implementasi antarmuka OWIN oleh Microsoft . Oleh karena itu kita mendengar 2 kata ini (OWIN / KATANA) bersama-sama dan seringkali kita menjadi bingung antara perbedaan antara 2 istilah ini. Jadi, Katana adalah implementasi Microsoft dari antarmuka OWIN. Katakanlah ada perusahaan lain bernama BIG-BOSS yang ingin membuat implementasi OWIN mereka sendiri, mereka dapat melakukan itu dan menamai implementasinya sebagai 'BATANA' dan mengiklankan frasa seperti OWIN / BATANA.

Jadi, mengapa OWIN !!!

Pikirkan tentang negara di mana satu-satunya kendaraan yang tersedia untuk bergerak adalah truk. Tidak ada lagi. Jika Anda ingin membeli kendaraan, Anda akan membeli truk. Ya, itu digunakan untuk melayani yang baik tetapi orang-orang mulai menyadari bahwa, mereka tidak memerlukan truk sepanjang waktu, terutama ketika mereka ingin pergi menonton film atau membeli susu, mengendarai truk berat tidak hanya membutuhkan bahan bakar tinggi, tetapi juga menambah stres saat mengemudi. Tapi ya, jika mereka ingin membawa banyak barang berat, truk melayani tujuannya dengan sangat baik.

Kemudian, Pemerintah negara itu datang dengan spesifikasi untuk pembuat kendaraan. Spesifikasi adalah sebagai berikut:

  1. Kendaraan harus memiliki 4 roda
  2. Kendaraan harus memiliki kemudi.
  3. Kendaraan harus memiliki lampu utama dan lampu sinyal.

Jadi, berdasarkan spesifikasi ini, siapa pun dapat membuat kendaraan sesuai dengan kebutuhan yang berbeda dan mereka dapat memberi nama kendaraan mereka sesuai. Karena itu, Sedan, Truk Pikap, SUV, VAN, dll. Semua jenis kendaraan muncul di pasar. Jika seseorang tidak perlu membawa barang-barang berat sepanjang waktu, lebih membutuhkan kendaraan hanya untuk pergi ke tempat kerja, ia dapat membeli sedan kecil. Seseorang dapat membeli SUV jika dia membutuhkan lebih banyak daya.

Berdasarkan contoh di atas, kita dapat mengatakan bahwa aplikasi Web ASP.NET kami menggunakan System.Web Assembly yang sangat dimuat (seperti truk) dan jika kita ingin membuat Aplikasi Web kecil di mana tujuan kita hanya untuk melayani beberapa file berdasarkan pada set kecil permintaan, kita terikat untuk menggunakan perakitan System.Web (truk) yang berat itu. Sekarang, OWIN muncul. OWIN adalah seperangkat spesifikasi (kita bisa menyebutnya antarmuka) yang mendefinisikan Server. Berdasarkan spesifikasi itu, seseorang (seperti pembuat kendaraan) dapat membuat berbagai jenis server berdasarkan domain masalah / kebutuhan aplikasi tertentu. Microsoft membuat Implementasi mereka sendiri untuk OWIN bernama Katana dengan cara yang sama yang dapat melayani Web API. Karena WebAPI adalah teknologi ringan, yang tidak perlu Sistem full blown.

Sekarang, jika Anda bertanya, ' Apakah saya membutuhkannya?' Jawabannya adalah, 'Itu tergantung pada kebutuhan Anda akan kinerja'. Jika Anda tidak keberatan mengendarai truk Anda bahkan untuk menonton film, maka, mungkin Anda tidak perlu OWIN. Tetapi jika Anda merasa bahwa, mobil Sedan ringan adalah semua yang Anda butuhkan untuk mengemudi dalam kota, jarak kecil, menonton film .. dll .. ya, Anda dapat memeriksa implementasi OWIN apa yang tersedia di pasar. Katana adalah salah satu implementasi dari OWIN, oleh karena itu Anda dapat memeriksa apa yang ditawarkan Katana. Bukan hanya Katana, jika perusahaan lain mengimplementasikan OWIN sesuai dengan Domain spesifik (misalnya, server untuk Alat Kesehatan yang akan mengunduh informasi obat terbaru) dan jika Anda seorang dokter, mungkin, Anda dapat memeriksa penerapan OWIN tersebut. Selain itu, Anda sendiri dapat membuat implementasi OWIN Anda sendiri dengan menargetkan ceruk tertentu.

Dalam hal aplikasi web, jika Anda adalah pengembang Web sederhana, mengembangkan Situs Web khusus untuk klien Anda, mungkin, Anda tidak perlu khawatir tentang implementasi kustom OWIN, karena IIS akan melayani Anda secara seimbang. Jika Anda membangun proyek API Web, Anda akan mendapatkan templat berbasis Katana yang siap dibuat dari Visual Studio -> Proyek Baru, sehingga Anda tidak perlu khawatir tentang apa pun selain mempelajari teknik spesifik Katana. Pada saat ini, Katana belum cukup matang untuk sepenuhnya menggantikan kebutuhan IIS untuk ASP.NET MVC, tetapi mungkin, di masa depan itu akan terjadi.

Lalu Kapan saya mungkin perlu menulis Implementasi OWIN saya sendiri?

Jawaban: Ya, misalnya, Anda telah mengembangkan aplikasi Windows yang seharusnya berjalan sebagai server di latar belakang dan mendengarkan nomor port XXXX. Server Anda hanya akan merespons beberapa Permintaan seperti ini:

  1. DAPATKAN Inventaris
  2. HAPUS ID Inventaris = 4
  3. ID Persediaan PUT = 5

Itu saja. Dan tidak ada lagi. Jadi, mengapa Anda memerlukan server web IIS lengkap untuk tugas kecil ini? Anda dapat membuat implementasi OWIN Anda sendiri dalam kasus itu. (Mungkin, Anda akan menggunakan Katana untuk itu)

Ok, jadi saya mengerti bahwa, jika saya ingin membuat situs web ASP.NET MVC, saya tidak memiliki opsi untuk menggantikan IIS, lalu mengapa saya harus tahu tentang Katana saat ini?

Jawaban: Meskipun Katana tidak cukup matang untuk menggantikan kebutuhan IIS sehingga Anda dapat meng-host situs web ASP.NET MVC Anda secara langsung di Katana, tetapi Katana mengimplementasikan banyak antarmuka OWIN yang keren sehingga Anda dapat memanfaatkan penggunaan sisi-sisi fitur tersebut. di samping. Sebagai contoh, mengizinkan pengguna Anda untuk login menggunakan Facebook, Google, Twitter dll itu tidak mudah sebelumnya. Katana memberi Anda banyak kait (sebagai perangkat tengah) sehingga Anda dapat membiarkan Katana merawat Otentikasi Berbasis Media Sosial eksternal dengan mudah tanpa menulis kode pipa ledeng. Ada banyak manfaat lain untuk menggunakan Katana yang mungkin Anda ketahui saat mulai menggunakan teknologi ini.

Emran Hussain
sumber
1
Saya tidak akan mengatakan bahwa OWIN adalah antarmuka per katakan, itu adalah standar, protokol untuk menstandarisasi cara aplikasi berbicara ke host. Tetapi penting untuk memastikan bahwa Katana hanyalah implementasi dari standar yang dikembangkan dan dikelola oleh microsoft. Implementasi lain tercantum di sini: github.com/owin/owin/wiki/Implementations
Stéphane
1
agak membingungkan ketika Anda mengatakan spesifikasi untuk kendaraan adalah '4 roda' dan kemudian seseorang membuat kendaraan 18 roda ... tidak sesuai dengan spesifikasi lalu apakah itu ...? atau saya melewatkan sesuatu. Analogi yang bagus. Membuatnya lebih mudah dipahami
kurasa
1
@Stephane: Ya, mungkin tidak seperti antarmuka, saya mencoba memberikan ide tingkat tinggi sehingga seseorang dapat memahami hubungan antara OWIN dan KATANA tanpa dibanjiri banyak jargon teknis.
Emran Hussain
1
"Meskipun Katana tidak cukup matang untuk menggantikan kebutuhan IIS sehingga Anda dapat meng-host situs web ASP.NET MVC Anda langsung di Katana" tampaknya menunjukkan bahwa IIS tidak penting setelah Katana 1,0. Tidak, tidak, itu tidak benar. Microsoft memiliki Microsoft.Owin.Host.IIS tersedia, yang memungkinkan aplikasi web + Katana di-host secara langsung di IIS (tanpa System.Web tentu saja). IIS masih merupakan komponen kunci untuk aplikasi ASP.NET di platform Microsoft.
Lex Li
2
Akan luar biasa, jika Anda dapat membantu saya dalam memahami -what is lightweight part, i mean if Katana is compared to IIS, by which means it is lightweight ( say it does not do step#1,2,3 etc.. , but IIS does that.
Arindam Nayak
47

Versi sederhana dari jawaban itu adalah bahwa Katana gong untuk sepenuhnya menggantikan perakitan System.Web dan pipa ASP.NET lama, yang memberi Anda fleksibilitas yang lebih baik (gunakan dalam skenario lebih banyak dan gunakan hanya bagian yang Anda suka) dan kinerja.

Jadi semua orang harus menonton evolusinya sekarang dan siap untuk beralih ketika akhirnya selesai.

Di bawah ini adalah diagram yang saya gambar untuk mengisi rincian yang Microsoft gagal sertakan dalam artikel ini .

masukkan deskripsi gambar di sini

OWIN adalah standar yang memungkinkan kerangka kerja aplikasi berjalan di atasnya dan melupakan semua yang ada di bawahnya. Di sisi lain, OWIN sendiri menggunakan berbagai adaptor host untuk memastikannya dapat berbicara dengan server web yang mendasarinya (IIS dan banyak lainnya).

Saya sekarang bekerja dengan penulis server web Jexus untuk menyelidiki bagaimana kita dapat menulis adaptor host untuk menjembatani OWIN / Katana dan Jexus. Kami sangat senang mengetahui bahwa OWIN fleksibel dan sangat dapat dikustomisasi.

Referensi: http://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/

Lex Li
sumber
Jadi saya jawab ini Anda mengatakan bahwa "Katana adalah gong untuk sepenuhnya menggantikan perakitan System.Web dan pipa ASP.NET lama". Apakah itu berarti dapat mengganti semua Server Adapters dalam diagram Anda di atas, atau mungkin hanya host.systemweb?
netfed
@netfed sayangnya OWIN sendiri melakukannya dan sekarang ASP.NET Core mengambil alih. Pertanyaan ini dan jawabannya sudah kedaluwarsa.
Lex Li
Aha !! Jadi inti Asp.net memiliki kapasitas Owin? Atau inti Asp.net berfungsi sebagai kumpulan modul, di mana Anda hanya dapat mengimplementasikan modul yang Anda butuhkan, dan tidak harus menggunakan koleksi fungsi yang lebih besar yang dibangun ke dalam System.web?
netfed
2
@netfed, OWIN mati (keyboard ponsel saya mengubah kata-kata saya). ASP.NET Core tetap menggunakan pendekatan middleware, dan Anda dapat merakit komponennya sesuka Anda, dan tidak lebih System.Web.
Lex Li
Itu menyimpulkan semuanya :-) Terima kasih telah menjelaskan.
netfed
15

Mengapa saya harus menggunakan OWIN, sementara saya bisa menggunakan IIS?

OWIN dirancang untuk memisahkan server web dari kerangka kerja Anda. Itu dapat membuat aplikasi ringan dan portabel untuk kerangka kerja dan server pencampuran.

Dan Katana adalah implementasi komponen OWIN dari Microsoft.

Sejak beberapa tahun terakhir Microsoft membuat alat web lebih gesit dan responsif seiring rencana mereka yang sedang berjalan. Sebagai contoh, pengembangan ASP.Net MVC dan ASP.Net Web API. Mereka tidak bergantung pada System.Web dll yang merupakan beban besar yang mereka rasakan sekarang saya pikir. Keuntungannya adalah kedua pengembangan perbaikan dapat diberikan pada waktu yang tepat dan siklus lebih cepat dari sebelumnya. Juga sekarang pengembang dapat menyebarkan aplikasi ini pada host OWIN kustom atau Katana, yang merupakan referensi implementasi OWIN.

Apa gunanya?

Microsoft telah merilis proyek yang merupakan host web berbasis OWIN ringan di atas IIS, yang disebut `Helios. Tujuannya adalah untuk menghindari hubungan ASP.NET/IIS dengan menyediakan beberapa komponen kecil independen yang dapat digunakan, diinstal, dan dikelola secara independen di web-host yang mengimplementasikan spesifikasi OWIN.

Salah satu alasan inti adalah faktor kinerja. Helios akan dapat mencapai throughput 2x-3x lebih banyak daripada aplikasi ASP.Net standar. Dalam hal konsumsi memori, Helios jauh lebih baik daripada System.Web dll. Dalam patokan yang diambil, arsitektur Helios memungkinkan aplikasi sampel untuk mencapai 50.000 permintaan bersamaan dengan overhead sekitar 1GB lebih sedikit dibandingkan dengan aplikasi ASP.Net standar.

Tidak
sumber
1
Anda mungkin menemukan posting ini bermanfaat. simple-talk.com/dotnet/.net-framework/…
nznoor
0

OWIN adalah abstraksi antara aplikasi web dan platform hosting. Jika Anda menulis aplikasi web menggunakan OWIN Anda tidak terikat dengan IIS, Anda dapat menggunakan host lain jika mau.

Anda bertanya mengapa menggunakan OWIN daripada IIS, tetapi ini bukan alternatif satu sama lain. OWIN berada di antara IIS dan aplikasi Anda sehingga Anda dapat mematikan IIS tanpa menulis ulang aplikasi Anda.

Anda mungkin juga ingin memeriksa halaman ini https://github.com/Bikeman868/OwinFramework/wiki/OWIN

bikeman868
sumber