Sự khác biệt giữa chế độ đường ống 'cổ điển' và 'tích hợp' trong IIS7 là gì?


491

Tôi đã triển khai một ứng dụng ASP.NET MVC đêm qua và phát hiện ra rằng việc triển khai với IIS7 được đặt ở chế độ tích hợp sẽ ít tốn công hơn. Câu hỏi của tôi là sự khác biệt là gì? Và ý nghĩa của việc sử dụng cái này hay cái kia là gì?


10
Làm thế nào ít công việc để triển khai với chế độ tích hợp so với cổ điển? Chỉ tò mò
Peter Lillevold

9
@Peter: URL mở rộng yêu cầu được ánh xạ thủ công ở chế độ cổ điển.
Mehrdad Afshari

2
ngay cả trong MVC Global.asax, các ghi chú đã đọc: Để được hướng dẫn bật chế độ cổ điển IIS6 hoặc IIS7, hãy truy cập go.microsoft.com/?LinkId=9394801 . Hoặc bạn chỉ có thể bật chế độ tích hợp và bao gồm lắp ráp System.Web.Mvc và mọi thứ chỉ hoạt động.
Jon Erickson

Câu trả lời:


643

Chế độ cổ điển (chế độ duy nhất trong IIS6 trở xuống) là chế độ trong đó IIS chỉ hoạt động với các phần mở rộng ISAPI và bộ lọc ISAPI. Trên thực tế, trong chế độ này, ASP.NET chỉ là một phần mở rộng ISAPI (aspnet_isapi.dll) và bộ lọc ISAPI (aspnet_filter.dll). IIS chỉ coi ASP.NET là một plugin bên ngoài được triển khai trong ISAPI và hoạt động với nó như một hộp đen (và chỉ khi nó cần đưa ra yêu cầu cho ASP.NET). Trong chế độ này, ASP.NET không khác nhiều so với PHP hoặc các công nghệ khác cho IIS.

Mặt khác, chế độ tích hợp là một chế độ mới trong IIS7 nơi đường ống IIS được tích hợp chặt chẽ (nghĩa là giống như) với đường ống yêu cầu ASP.NET. ASP.NET có thể thấy mọi yêu cầu mà nó muốn và thao tác mọi thứ trên đường đi. ASP.NET không còn được coi là một plugin bên ngoài. Nó hoàn toàn được pha trộn và tích hợp trong IIS. Trong chế độ này, HttpModulevề cơ bản , ASP.NET có sức mạnh gần như bộ lọc ISAPI sẽ có và ASP.NET HttpHandlercó thể có khả năng gần tương đương như một phần mở rộng ISAPI có thể có. Trong chế độ này, ASP.NET về cơ bản là một phần của IIS.


8
Được tích hợp chậm hơn cổ điển?
Alex Nolasco

Tôi không chắc liệu có đúng không khi nói rằng asp.net là một phần của IIS. Chúng trông giống như một sản phẩm riêng biệt (mặc dù tích hợp). Tôi có thể sai.
Andrew Savinykh

@MehrdadAfshari Việc xử lý các HttpModulesphương thức / sự kiện trong iis7có nhiều chức năng hơn trong iis6? bạn có thể giải thích về điều đó không ?
Royi Namir

Và để thêm vào, trong chế độ Đường ống tích hợp, mọi giai đoạn trong đường ống yêu cầu được hiển thị dưới dạng sự kiện, ánh xạ của trình xử lý có thể bị ghi đè trong ứng dụng. Ví dụ: người ta có thể định nghĩa một httpHandler tài nguyên được nhúng, cho một số loại tuyến nhất định và ánh xạ chúng tới trình xử lý tùy chỉnh của bạn thông qua trình xử lý tuyến.
Ren

1
Một câu trả lời hoàn hảo cho câu hỏi như vậy, ít nhất nên tham khảo một trong những bài viết của Microsoft, chẳng hạn như iis.net/learn/application-frameworks/ Lỗi .
Lex Li

115

Chế độ nhóm ứng dụng tích hợp

Khi nhóm ứng dụng ở chế độ Tích hợp, bạn có thể tận dụng kiến ​​trúc xử lý yêu cầu tích hợp của IIS và ASP.NET. Khi một nhân viên xử lý trong nhóm ứng dụng nhận được yêu cầu, yêu cầu sẽ chuyển qua một danh sách các sự kiện được sắp xếp. Mỗi sự kiện gọi các mô đun gốc và được quản lý cần thiết để xử lý các phần của yêu cầu và để tạo phản hồi.

Có một số lợi ích khi chạy nhóm ứng dụng trong chế độ Tích hợp. Đầu tiên, các mô hình xử lý yêu cầu của IIS và ASP.NET được tích hợp vào một mô hình quy trình thống nhất. Mô hình này loại bỏ các bước đã được sao chép trước đó trong IIS và ASP.NET, chẳng hạn như xác thực. Ngoài ra, Chế độ tích hợp cho phép tính khả dụng của các tính năng được quản lý cho tất cả các loại nội dung.

Chế độ bể bơi ứng dụng cổ điển

Khi nhóm ứng dụng ở chế độ Cổ điển, IIS 7.0 sẽ xử lý các yêu cầu như trong chế độ cách ly quy trình công nhân IIS 6.0. Yêu cầu ASP.NET trước tiên trải qua các bước xử lý riêng trong IIS và sau đó được chuyển đến Aspnet_isapi.dll để xử lý mã được quản lý trong thời gian chạy được quản lý. Cuối cùng, yêu cầu được chuyển trở lại qua IIS để gửi phản hồi.

Sự tách biệt giữa các mô hình xử lý yêu cầu IIS và ASP.NET này dẫn đến sự trùng lặp của một số bước xử lý, chẳng hạn như xác thực và ủy quyền. Ngoài ra, các tính năng mã được quản lý, chẳng hạn như xác thực mẫu, chỉ khả dụng cho các ứng dụng hoặc ứng dụng ASP.NET mà bạn có tập lệnh ánh xạ tất cả các yêu cầu được xử lý bởi aspnet_isapi.dll.

Hãy chắc chắn kiểm tra các ứng dụng hiện có của bạn để biết tính tương thích trong chế độ Tích hợp trước khi nâng cấp môi trường sản xuất lên IIS 7.0 và gán ứng dụng cho nhóm ứng dụng ở chế độ Tích hợp. Bạn chỉ nên thêm một ứng dụng vào nhóm ứng dụng ở chế độ Cổ điển nếu ứng dụng không hoạt động ở chế độ Tích hợp. Ví dụ: ứng dụng của bạn có thể dựa vào mã thông báo xác thực được truyền từ IIS sang thời gian chạy được quản lý và do kiến ​​trúc mới trong IIS 7.0, quy trình phá vỡ ứng dụng của bạn.

Lấy từ: Sự khác biệt giữa DefaultAppPool và Classic .NET AppPool trong IIS7 là gì?

Nguồn gốc: Giới thiệu về Kiến trúc IIS


28
Câu chính trong đoạn cuối: "Bạn chỉ nên thêm một ứng dụng vào nhóm ứng dụng ở chế độ Cổ điển nếu ứng dụng không hoạt động ở chế độ Tích hợp."
DavidRR

6
@JsonStatham - Một lý do cho điều này là Chế độ tích hợp không thể sử dụng ASP.NET Impersonation (Trang web> YourSite> IIS> Xác thực). Nếu bạn có một trang Intranet và đang sử dụng Windows xác thực, đây là một cân nhắc quan trọng. liên kết
3308241

11

IIS 6.0 và các phiên bản trước:

ASP.NET được tích hợp với IIS thông qua tiện ích mở rộng ISAPI, API C (API dựa trên ngôn ngữ lập trình C) và hiển thị mô hình xử lý yêu cầu và ứng dụng của chính nó.

Điều này tiếp xúc hiệu quả với hai đường ống máy chủ (yêu cầu / phản hồi) riêng biệt, một cho các bộ lọc ISAPI và các thành phần mở rộng, và một cho các thành phần ứng dụng được quản lý. Các thành phần ASP.NET sẽ thực thi hoàn toàn bên trong bong bóng mở rộng ASP.NET ISAPI VÀ CHỈ cho các yêu cầu được ánh xạ tới ASP.NET trong cấu hình bản đồ tập lệnh IIS.

Yêu cầu các loại nội dung không phải ASP.NET: - hình ảnh, tệp văn bản, trang HTML và trang ASP không có tập lệnh, được xử lý bởi IIS hoặc các phần mở rộng ISAPI khác và KHÔNG hiển thị với ASP.NET.

Hạn chế chính của mô hình này là các dịch vụ được cung cấp bởi các mô-đun ASP.NET và mã ứng dụng ASP.NET tùy chỉnh KHÔNG có sẵn cho các yêu cầu không phải ASP.NET

BẢN ĐỒ SCRIPT là gì?

Bản đồ tập lệnh được sử dụng để liên kết các phần mở rộng tệp với trình xử lý ISAPI thực thi khi loại tệp đó được yêu cầu. Bản đồ tập lệnh cũng có một cài đặt tùy chọn xác minh rằng tệp vật lý được liên kết với yêu cầu tồn tại trước khi cho phép yêu cầu được xử lý

Một ví dụ tốt có thể là seen here

IIS 7 trở lên

IIS 7.0 trở lên đã được thiết kế lại từ đầu để cung cấp ISAPI dựa trên API C ++ hoàn toàn mới.

IIS 7.0 trở lên tích hợp thời gian chạy ASP.NET với chức năng cốt lõi của Máy chủ Web, cung cấp một đường dẫn xử lý yêu cầu thống nhất (đơn) được tiếp xúc với cả các thành phần gốc và được quản lý được gọi là mô-đun (IHttpModules)

Điều này có nghĩa là IIS 7 xử lý các yêu cầu đến bất kỳ loại nội dung nào, với cả hai NON ASP.NET Modules / native IIS modulesASP.NET modulescung cấp xử lý yêu cầu trong tất cả các giai đoạn Đây là lý do tại sao các loại nội dung NON ASP.NET (.html, tệp tĩnh) có thể được xử lý bởi các mô-đun .NET .

  • Bạn có thể xây dựng các mô-đun được quản lý mới ( IHttpModule) có khả năng thực thi cho tất cả nội dung ứng dụng và cung cấp một bộ dịch vụ xử lý yêu cầu nâng cao cho ứng dụng của bạn.
  • Thêm Trình xử lý được quản lý mới ( IHttpHandler)

5

Trong chế độ cổ điển, IIS hoạt động với các phần mở rộng ISAPI và bộ lọc ISAPI trực tiếp. Và sử dụng hai dòng ống, một cho mã gốc và một cho mã được quản lý. Bạn có thể chỉ cần nói rằng trong chế độ Cổ điển IIS 7.x hoạt động giống như IIS 6 và bạn không nhận được thêm lợi ích từ các tính năng của IIS 7.x.

Trong chế độ tích hợp IIS và ASP.Net được kết hợp chặt chẽ thay vào đó chỉ phụ thuộc vào hai DLL trên Asp.net như trong trường hợp chế độ cổ điển.

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.