Khi nào tôi nên sử dụng OWIN Katana?


270

Tôi mới biết về OWIN và Katana. Tôi thực sự không hiểu tại sao tôi nên sử dụng OWIN, trong khi tôi có thể sử dụng IIS. Để đơn giản hóa, câu hỏi của tôi là: Tôi sẽ mất gì nếu tôi bỏ qua việc học OWIN và sử dụng IIS cho các trang web của mình?

Tôi googled nhưng không có một lời giải thích đơn giản. Có một số thông tin ở đây , nhưng họ sử dụng một số cụm từ biệt ngữ để tôi không thể hiểu nó.



2
Tôi tự hỏi bao nhiêu hướng của OWIN bị ảnh hưởng bởi IoT. Chúng ta không thể thực sự gắn IIS trên Arduino.
Sentinel

Câu trả lời:


279

Trong asp.net WebApi v2, đường ống OWIN trở thành mặc định. Nó cuối cùng sẽ là đường ống tiêu chuẩn trong bất kỳ dự án asp.net nào.

Tôi không thể đặt nó tốt hơn những gì được viết ở đây: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

Phần "Giao diện web mở cho .NET (OWIN)" giải thích hoàn hảo các mục tiêu của OWIN.

Không có OWIN, các bit asp.net được ghép nối với cách IIS giao tiếp với ứng dụng. OWIN tóm tắt các máy chủ web và các thành phần khung. Điều đó có nghĩa là mã ứng dụng của bạn bây giờ sẽ biết về giao diện OWIN, nhưng không phải về máy chủ web đang phục vụ yêu cầu.

Đổi lại, các ứng dụng có thể được chuyển dễ dàng hơn giữa các máy chủ và có khả năng toàn bộ nền tảng / hệ điều hành. Ví dụ: khả năng lưu trữ ứng dụng trong bảng điều khiển hoặc bất kỳ quy trình nào cho phép Mono lưu trữ ứng dụng mà không cần nỗ lực ... (Raspberry Pi bất cứ ai)

Khía cạnh thứ hai là nó hoạt động như một đường ống dẫn.


Đường ống Owin


Bạn có thể cắm bất kỳ phần mềm trung gian nào (và bao nhiêu tùy ý) giữa máy chủ web và ứng dụng của bạn.
Điều này cho phép các giải pháp mô-đun nhiều hơn. Bạn có thể phát triển các phần mềm trung gian có thể phân phối lại có thể tác động đến yêu cầu / phản hồi đến / từ ứng dụng của bạn, nhưng giữ các mô-đun này tách biệt với mã ứng dụng.

Để thuyết phục bản thân về lợi ích của phương pháp mô đun này, hãy xem các gói nuget có sẵn cho OWIN: http://www.nuget.org/packages?q=owin

Rất nhiều trong số các gói này trước đây là chức năng cốt lõi của asp.net và đã được trích xuất dưới dạng phần mềm trung gian.
Ví dụ: việc thêm hỗ trợ để đăng nhập bằng nhiều nhà cung cấp OAuth khác nhau trở thành mối quan tâm về cơ sở hạ tầng (phần mềm trung gian) và không cần phải là một phần của mã ứng dụng của bạn nữa:

Hoặc nếu bạn muốn tự động thay thế tất cả các hình ảnh từ trang web của mình bằng hình ảnh mèo dễ thương, bạn cũng có thể làm điều đó một cách minh bạch:

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

EDIT: Hiện đã có sẵn dưới dạng gói nuget : Owin.Catify !


Câu trả lời của bạn chắc chắn là tốt khi nó được nâng cấp, nhưng thật khó để tôi tìm ra nó.
Seyed Morteza Mousavi

5
Làm thế nào tôi có thể làm cho nó tốt hơn? Bạn không hiểu gì
Stéphane

1
Mặc dù OWIN không có trang phục, nhưng có vẻ khó gỡ lỗi vì luồng thực thi sẽ "nhảy" từ phần mềm trung gian sang phần mềm trung gian một cách hiệu quả. Mỗi người có khả năng thay đổi phản ứng trên đường đi. Trình gỡ lỗi đính kèm của Visual Studio dường như không thể theo dòng chảy. Và khi xảy ra ngoại lệ (trên ứng dụng web), bạn sẽ chỉ nhận được một trang trống với phản hồi 200 OK. Không có lỗi ở bất cứ nơi nào ngoài nhật ký Sự kiện Windows.
simbolo

7
Tôi tìm thấy lời giải thích tại weblogs.asp.net/pglavich/owin-katana-and-getting-started hữu ích. Đây là một cách để tách ứng dụng của bạn khỏi IIS và sự phụ thuộc vào hệ thống System.Web. Giảm số lượng các thành phần trong đường ống HTTP, do đó giữ cho ứng dụng nhẹ.
Terence

2
Tôi cần thêm rằng trong môi trường hiện tại của tôi, một số nhóm sử dụng WebApi và một số sử dụng Nancy. Vì cả hai đều ngồi trên OWIN, chúng tôi có thể chia sẻ các phần mềm trung gian như xử lý Api Key hoặc Xác thực không trạng thái, độc lập với khung. Chúng tôi để đội chọn những gì phù hợp với họ nhất. Đó là lợi ích thực sự của 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
      } 
   }
}

Vâng đúng vậy. OWIN là một giao diện và Katana là một triển khai giao diện OWIN của Microsoft . Do đó, chúng tôi nghe thấy 2 từ này (OWIN / KATANA) và nhiều lần chúng tôi bị nhầm lẫn giữa sự khác biệt giữa 2 thuật ngữ này. Vì vậy, Katana là triển khai giao diện OWIN của Microsoft. Giả sử có một công ty khác tên BIG-BOSS muốn tạo ra triển khai OWIN của riêng họ, họ có thể thực hiện điều đó và đặt tên cho việc triển khai của họ là 'BATANA' và quảng cáo các cụm từ như OWIN / BATANA.

Vậy, tại sao SỞ HỮU !!!

Hãy nghĩ về một đất nước nơi phương tiện duy nhất có sẵn để di chuyển là một chiếc xe tải. Không có gì khác. Nếu bạn muốn mua một chiếc xe, bạn sẽ mua xe tải. Chà, điều đó đã từng phục vụ tốt nhưng mọi người bắt đầu nhận ra rằng, họ không cần xe tải mọi lúc, đặc biệt là khi họ muốn đi xem phim hoặc mua sữa, lái một chiếc xe tải nặng không chỉ tốn nhiên liệu cao mà còn thêm căng thẳng khi lái xe. Nhưng vâng, nếu họ muốn chở nhiều đồ nặng, xe tải phục vụ mục đích rất tốt.

Sau đó, Chính phủ của nước đó đã đưa ra một đặc điểm kỹ thuật cho các nhà sản xuất xe. Thông số kỹ thuật như sau:

  1. Một chiếc xe cần phải có 4 bánh
  2. Một chiếc xe phải có tay lái.
  3. Một chiếc xe phải có đèn pha và đèn tín hiệu.

Vì vậy, dựa trên các thông số kỹ thuật này, bất kỳ ai cũng có thể chế tạo xe theo các nhu cầu khác nhau và họ có thể đặt tên cho chiếc xe của mình cho phù hợp. Do đó, Sedan, Pickup Truck, SUV, VAN, ..v.v .. tất cả các loại xe đã xuất hiện trên thị trường. Nếu ai đó không cần phải mang vác nặng mọi lúc, thay vào đó chỉ cần một chiếc xe để đi làm, anh ấy / cô ấy có thể mua một chiếc Sedan nhỏ. Ai đó có thể mua SUV nếu anh ta cần ít năng lượng hơn.

Dựa trên ví dụ trên, chúng ta có thể nói rằng ứng dụng Web ASP.NET của chúng tôi sử dụng System.Web hội được tải rất nhiều (như một chiếc xe tải) và nếu chúng tôi muốn tạo một Ứng dụng web nhỏ trong đó mục đích của chúng tôi chỉ là phục vụ một số tệp dựa trên trên một tập hợp nhỏ các yêu cầu, chúng tôi buộc phải sử dụng cụm System.Web (xe tải) nặng đó. Bây giờ, OWIN xuất hiện. OWIN là một tập hợp các đặc tả (chúng ta có thể gọi nó là giao diện) xác định Máy chủ. Dựa trên đặc điểm kỹ thuật đó, một người nào đó (như nhà sản xuất xe) có thể tạo ra nhiều loại máy chủ khác nhau dựa trên các vấn đề / nhu cầu ứng dụng cụ thể. Microsoft đã tạo Triển khai riêng cho OWIN có tên Katana theo cùng cách có thể phục vụ API Web. Vì WebAPI là một công nghệ trọng lượng nhẹ, không cần những thứ System.Web đầy đủ,

Bây giờ, nếu bạn hỏi, ' Tôi có cần nó không'? Câu trả lời là, 'Nó phụ thuộc vào nhu cầu thực hiện của bạn'. Nếu bạn không ngại lái xe tải của mình ngay cả khi đi xem phim, thì có lẽ bạn không cần SỞ HỮU. Nhưng nếu bạn cảm thấy rằng, một chiếc xe Sedan trọng lượng nhẹ là tất cả những gì bạn cần để lái trong một thành phố, khoảng cách nhỏ, xem phim..v.v .. vâng, bạn có thể kiểm tra những triển khai của OWIN có sẵn trên thị trường. Katana là một trong những triển khai của OWIN, do đó bạn có thể kiểm tra những gì Katana cung cấp. Không chỉ Katana, nếu bất kỳ công ty nào khác thực hiện OWIN theo Tên miền cụ thể (ví dụ: máy chủ cho Thiết bị y tế sẽ tải xuống thông tin thuốc mới nhất) và nếu bạn là bác sĩ, có lẽ, bạn có thể kiểm tra việc triển khai OWIN. Hơn nữa, bản thân bạn có thể tự tạo triển khai OWIN nhắm mục tiêu bất kỳ mục tiêu cụ thể nào.

Về mặt ứng dụng web, nếu bạn là nhà phát triển Web đơn giản, phát triển Trang web tùy chỉnh cho khách hàng của mình, có lẽ, bạn không cần phải lo lắng về việc triển khai tùy chỉnh OWIN, vì IIS sẽ phục vụ bạn một cách cân bằng. Nếu bạn xây dựng một dự án API Web, bạn sẽ có sẵn mẫu dựa trên Katana được tạo từ Visual Studio -> Dự án mới, do đó bạn sẽ không phải lo lắng về bất cứ điều gì ngoài việc học các kỹ thuật cụ thể của Katana. Tại thời điểm này, Katana chưa đủ trưởng thành để thay thế hoàn toàn nhu cầu về IIS cho ASP.NET MVC, nhưng có lẽ, trong tương lai nó sẽ như vậy.

Sau đó, khi nào tôi có thể cần phải viết Thực hiện RIÊNG của riêng mình?

Trả lời: Chẳng hạn, giả sử, bạn đã phát triển một ứng dụng Windows sẽ chạy như một máy chủ ở chế độ nền và lắng nghe số cổng XXXX. Máy chủ của bạn sẽ chỉ phản hồi một số nhóm Yêu cầu như thế này:

  1. NHẬN hàng tồn kho
  2. XÓA ID hàng tồn kho = 4
  3. PUT ID hàng tồn kho = 5

Đó là tất cả. Và không có gì khác. Vì vậy, tại sao bạn cần một máy chủ web IIS đầy đủ cho nhiệm vụ nhỏ này? Bạn có thể tạo triển khai OWIN của riêng bạn trong trường hợp đó. (Có lẽ, bạn sẽ sử dụng Katana cho điều đó)

Ok, vì vậy tôi hiểu rằng, nếu tôi muốn tạo một trang web ASP.NET MVC, tôi không có tùy chọn thay thế IIS, vậy tại sao tôi cần biết về Katana tại thời điểm này?

Trả lời: Mặc dù Katana chưa đủ chín chắn để thay thế nhu cầu của IIS để bạn có thể lưu trữ trang web ASP.NET MVC của mình trực tiếp trên Katana, nhưng Katana đã triển khai nhiều giao diện tuyệt vời của OWIN để bạn có thể tận dụng lợi thế của các tính năng đó bên cạnh. Ví dụ: cho phép người dùng của bạn đăng nhập bằng Facebook, Google, Twitter, v.v. Katana cung cấp cho bạn nhiều hook (như một kho trung gian) để bạn có thể để Katana chăm sóc Xác thực dựa trên Social Media bên ngoài một cách dễ dàng mà không cần viết mã hệ thống ống nước. Có nhiều lợi ích khác khi sử dụng Katana mà bạn có thể tìm ra khi bắt đầu sử dụng công nghệ này.


1
Tôi sẽ không nói rằng OWIN là một giao diện mỗi lần nói, nó là một tiêu chuẩn, một giao thức để chuẩn hóa cách ứng dụng nói chuyện với máy chủ. Nhưng điều quan trọng là chính xác rằng Katana chỉ là một triển khai của tiêu chuẩn đó được microsoft phát triển và duy trì. Các triển khai khác được liệt kê ở đây: github.com/owin/owin/wiki/Imcellenceations
Stéphane

1
hơi khó hiểu khi bạn nói thông số kỹ thuật cho một chiếc xe là '4 bánh' và sau đó ai đó tạo ra một chiếc xe 18 bánh ... không phù hợp với đặc điểm kỹ thuật thì phải không ...? hoặc tôi đang thiếu một cái gì đó. Tương tự tốt nào. Làm cho nó dễ hiểu hơn
Kurasa

1
@Stephane: Chà, nó có thể không giống như một giao diện, tôi đã cố gắng đưa ra một ý tưởng cấp cao để ai đó có thể hiểu mối quan hệ giữa OWIN và KATANA mà không bị choáng ngợp với nhiều thuật ngữ kỹ thuật.
Emran Hussain

1
"Mặc dù Katana chưa đủ chín chắn để thay thế nhu cầu của IIS để bạn có thể lưu trữ trang web ASP.NET MVC của mình trực tiếp trên Katana" dường như cho thấy IIS không quan trọng khi Katana là 1.0. Không, không, điều đó không đúng. Microsoft có sẵn Microsoft.Owin.Host.IIS, cho phép các ứng dụng web + Katana được lưu trữ trực tiếp trên IIS (tất nhiên không có System.Web). IIS vẫn là thành phần chính cho các ứng dụng ASP.NET trên nền tảng Microsoft.
Lex Li

2
Sẽ thật tuyệt, nếu bạn có thể giúp tôi hiểu -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

Một phiên bản đơn giản hơn của câu trả lời đó là Katana đang gồng mình thay thế hoàn toàn hệ thống System.Web và đường dẫn ASP.NET cũ, giúp bạn linh hoạt hơn (sử dụng nó trong nhiều tình huống hơn và chỉ sử dụng các phần bạn thích) và hiệu suất.

Vì vậy, mọi người nên theo dõi sự phát triển của nó ngay bây giờ và sẵn sàng chuyển đổi khi nó hoàn thành.

Dưới đây là sơ đồ tôi đã vẽ để điền vào các chi tiết Microsoft không bao gồm trong bài viết này .

nhập mô tả hình ảnh ở đây

OWIN là một tiêu chuẩn đến nỗi nó cho phép các khung ứng dụng chạy theo nó và quên đi mọi thứ bên dưới nó. Mặt khác, chính OWIN sử dụng các bộ điều hợp máy chủ khác nhau để đảm bảo nó có thể nói chuyện với các máy chủ web bên dưới (IIS và nhiều máy chủ khác).

Tôi hiện đang làm việc với tác giả máy chủ web Jexus để điều tra làm thế nào chúng ta có thể viết một bộ điều hợp máy chủ để kết nối OWIN / Katana và Jexus. Chúng tôi rất vui khi biết rằng OWIN linh hoạt và có khả năng tùy biến cao.

Tham khảo: http://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/


Vì vậy, tôi trả lời bạn nói rằng "Katana đang gồng mình để thay thế hoàn toàn lắp ráp System.Web và đường ống dẫn ASP.NET cũ". Điều đó có nghĩa là nó có thể thay thế tất cả các Bộ điều hợp Máy chủ trong sơ đồ của bạn ở trên, hoặc có thể chỉ là host.systemweb?
netfed

@netfed không may là chính OWIN làm và bây giờ ASP.NET Core tiếp quản. Câu hỏi này và các câu trả lời đều lỗi thời.
Lex Li

Aha !! Vậy lõi Asp.net có năng lực Owin? Hoặc lõi Asp.net hoạt động như một tập hợp các mô-đun, nơi bạn chỉ có thể triển khai các mô-đun mà bạn cần và không phải sử dụng bộ sưu tập lớn hơn các hàm được tích hợp trong System.web?
netfed

2
@netfed, OWIN chết (bàn phím di động của tôi đã thay đổi từ của tôi). ASP.NET Core vẫn giữ cách tiếp cận phần mềm trung gian, và bạn có thể lắp ráp các thành phần của nó theo cách bạn muốn, và không còn nữa System.Web.
Lex Li

Điều đó kết luận tất cả :-) Cảm ơn bạn đã làm rõ.
netfed

15

Tại sao tôi nên sử dụng OWIN, trong khi tôi có thể sử dụng IIS?

OWIN được thiết kế để tách rời các máy chủ web khỏi các khung công tác bạn làm việc. Nó có thể làm cho các ứng dụng nhẹ và di động cho các khung và máy chủ trộn.

Và Katana là triển khai các thành phần OWIN của Microsoft.

Kể từ vài năm trước, Microsoft đang làm cho các công cụ web trở nên linh hoạt và nhạy bén hơn khi kế hoạch của họ đang tiến triển. Ví dụ, sự phát triển của API Web ASP.Net MVC và ASP.Net. Họ không phụ thuộc vào System.Web dll, đây là một gánh nặng lớn mà họ cảm thấy bây giờ. Ưu điểm là cả hai bản sửa lỗi phát triển có thể được cung cấp kịp thời và chu kỳ nhanh hơn bao giờ hết. Hiện tại, các nhà phát triển có thể triển khai các ứng dụng này trên các máy chủ OWIN tùy chỉnh hoặc Katana, là tài liệu tham khảo về việc triển khai OWIN.

Rốt cuộc là gì?

Microsoft đã phát hành một dự án là một máy chủ web dựa trên OWIN nhẹ trên đỉnh IIS, được gọi là `Helios. Mục tiêu là để tránh mối quan hệ ASP.NET/IIS bằng cách cung cấp một số thành phần nhỏ độc lập có thể được sử dụng, cài đặt và quản lý chạy độc lập trên máy chủ web thực hiện các thông số kỹ thuật của OWIN.

Một trong những lý do cốt lõi là yếu tố hiệu suất. Helios sẽ có thể đạt được thông lượng gấp 2 lần so với ứng dụng ASP.Net tiêu chuẩn. Về mức tiêu thụ bộ nhớ, Helios tốt hơn nhiều so với System.Web dll. Trong một kiến ​​trúc chuẩn, kiến ​​trúc Helios đã cho phép một ứng dụng mẫu đạt được 50000 yêu cầu đồng thời với chi phí hoạt động thấp hơn khoảng 1 GB so với ứng dụng ASP.Net tiêu chuẩn.


1
Bạn có thể thấy bài viết này hữu ích. Simple-talk.com/dotnet/.net-framework/ từ
nznoor

0

OWIN là một sự trừu tượng giữa ứng dụng web và nền tảng lưu trữ. Nếu bạn viết ứng dụng web của mình bằng OWIN, bạn không bị ràng buộc với IIS, bạn có thể sử dụng máy chủ khác nếu muốn.

Bạn đã hỏi tại sao sử dụng OWIN chứ không phải IIS, nhưng đây không phải là lựa chọn thay thế cho nhau. OWIN nằm giữa IIS và ứng dụng của bạn để bạn có thể tắt IIS mà không cần viết lại ứng dụng của mình.

Bạn cũng có thể muốn xem trang này https://github.com/Bikeman868/OwinFramework/wiki/OWIN

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.