Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
1,72 MB
Nội dung
CHƯƠNG 19 Nhóm 6b: Ngơ Nguyễn Thanh Tùng Huỳnh Văn Thành KHẢ NĂNG MỞ RỘNG ĐIỀU KHIỂN Trong chương này, tơi cho bạn số tính tiên tiến MVC để làm việc với điều khiển Tôi bắt đầu chương cách khám phá phận trình xử lý yêu cầu dẫn đến việc thực phương pháp hành động thể cách khác để kiểm sốt Hình 19-1 cho thấy dòng chảy kiểm sốt thành phần Hình 19-1 Gọi phương thức hành động Phần đầu chương nhà máy sản xuất điều khiển hành động Tên thành phần đề nghị mục đích họ Các nhà máy sản xuất điều khiển chịu trách nhiệm cho việc tạo trường hợp điều khiển để phục vụ yêu cầu hành động Invoker chịu trách nhiệm cho việc tìm kiếm gọi phương thức hành động lớp điều khiển Các MVC Framework có mặc định triển khai hai thành phần, cho bạn thấy làm để cấu hình kiểm sốt hành vi họ Tơi cho thấy làm để thay thành phần hoàn toàn sử dụng logic tùy chỉnh Bảng 19-1 cung cấp tóm tắt cho chương Bảng 19-1 Chương Summary CHUẨN BỊ DỰ ÁN MẪU Trong chương , tạo dự án gọi ControllerExtensibility cách sử dụng tùy chọn template rỗng kích hoạt tùy chọn để thêm tài liệu tham khảo lõi MVC thư mục Tôi cần số điều khiển đơn giản để làm việc với chương , để tơi chứng minh loại khác tính mở rộng mà có sẵn Để có thiết lập , tơi tạo tập tin Result.cs Mơ hình thư mục sử dụng để xác định lớp Kết hiển thị Listing 19-1 Listing 19-1: Nội dung tập tin Result.cs Bước tạo thư mục / Views /Shared thêm nhìn gọi Result.cshtml Đây quan điểm tất phương thức hoạt động điều khiển làm , bạn xem nội dung tập tin Listing 19-2 Listing 19-2: Nội dung tập tin Result.cshtml Quan điểm sử dụng lớp kết mà tơi định nghĩa Listing 19-2 mơ hình hiển thị giá trị ControllerName ActionName Cuối , cần phải tạo số điều khiển Listing 19-3 cho thấy Điều khiển sản phẩm Listing 19-3: Nội dung tập tin Product Controller.cs Listing 19-4 diễn tả Điều khiển khách hang Listing 19-4: Nội dung tập tin CustomerController.cs Các điều khiển không thực hành động hữu ích khác để báo cáo họ gọi thông qua Result.cshtml THIẾT LẬP CÁC URL BAN ĐẦU Tôi muốn Visual Studio để bắt đầu với URL gốc cho ứng dụng đoán URL dựa tập tin chỉnh sửa.Chọn ControllerExtensibility Properties từ menu Project Studio Visual, chuyển sang Web kiểm tra tùy chọn trang cụ thể phần Bắt đầu hành động Bạn không cần phải cung cấp giá trị Chỉ kiểm tra tùy chọn đủ Tạo máy điều khiển tùy chỉnh Giống phần nhiều MVC Framework, cách tốt để hiểu cách điều khiển nhà máy làm việc để tạo tùy chỉnh triển khai Tôi không khuyên bạn làm điều dự án thực tế, có cách dễ dàng để tạo hành vi tùy chỉnh việc mở rộng nhà máy xây dựng Nhưng cách tốt đẹp để chứng minh làm khuôn khổ MVC tạo trường hợp điều khiển Nhà máy điều khiển xác định giao diện IControllerFactory, thể Listing 19-5 Listing 19-5: Giao diện IControllerFactory Trong phần tiếp theo, tạo nhà máy điều khiển tùy chỉnh đơn giản hướng dẫn bạn thông qua việc triển khai cho phương pháp giao diện IControllerFactory Để bắt đầu , tạo thư mục sở hạ tầng thêm file class gọi CustomControllerFactory.cs , mà sử dụng để tạo nhà máy điều khiển tùy chỉnh hiển thị Bảng Listing 19-6 Listing 19-6: Nội dung tập tin CustomControllerFactory.cs Các phương pháp quan trọng giao diện CreateController , mà MVC Framework gọi cần điều khiển để phục vụ yêu cầu Các tham số để phương pháp đối tượng RequestContext , cho phép nhà máy để kiểm tra chi tiết yêu cầu , chuỗi, có chứa giá trị điều khiển từ URL chuyển RequestContext lớp định nghĩa thuộc tính mơ tả Bảng 19-2 Bảng 19-2: Các thuộc tính RequestContext Một lý mà không khuyên bạn nên tạo điều khiển tùy chỉnh theo cách việc tìm kiếm lớp điều khiển web ứng dụng instantiating họ phức tạp Bạn cần để xác định vị trí điều khiển tự động liên tục đối phó với tất loại vấn đề tiềm năng, chẳng hạn disambiguating lớp có tên khơng gian tên khác nhau,trường hợp ngoại lệ nhà xây dựng nhiều Chỉ có hai điều khiển dự án ví dụ tơi nhanh chóng chúng trực tiếp, có nghĩa khó dây tên lớp thành nhà máy sản xuất điều khiển, rõ ràng khơng phải ý tưởng tốt cho dự án thực sự, cho phép tơi để bên ngồi số tiền lớn phức tạp Mục đích phương pháp CreateController tạo thể lớp điều khiển xử lý u cầu Khơng có giới hạn cách bạn làm điều Các quy tắc bạn phải trả lại đối tượng có thực Giao diện IController kết phương thức Các quy ước mà bạn thấy sách tồn cách nhà máy điều khiển mặc định viết.Như ví dụ, tơi thực công ước mã tơi: tơi nhận u cầu cho điều khiển, nối thêm Điều khiển để tên lớp, yêu cầu cho sản phẩm dẫn đến ProductController lớp phúc khởi tạo Bạn tự làm theo công ước MVC Framework bạn viết máy điều khiển để loại bỏ chúng tạo riêng bạn cho phù hợp với nhu cầu dự án bạn Tôi khơng nghĩ hợp lý để tạo cơng ước riêng bạn lợi ích nó, hữu ích để hiểu linh hoạt MVC Framework ĐỐI PHĨ VỚI CÁC ĐIỀU KHIỂN DỰ PHỊNG Nhà máy tùy chỉnh điều khiển phải trả lại thực giao diện IController kết từ Phương pháp CreateController, không, lỗi hiển thị cho người dùng Điều có nghĩa bạn cần phải có dự phòng vị trí cho yêu cầu bạn chế biến không nhằm vào điều khiển dự án bạn Bạn tạo sách bạn muốn để đối phó với tình trạng này: bạn định nghĩa điều khiển đặc biệt mà ám thơng báo lỗi, ví dụ, làm tơi có đồ theo u cầu để lớp điều khiển biết luôn tồn Khi tơi nhận u cầu mà khơng có đồ cho điều khiển dự án, nhắm mục tiêu ProductController Điều khơng phải điều hữu ích để làm dự án thực sự, chứng minh nhà máy có điều khiển hồn chỉnh linh hoạt cách yêu cầu giải thích Tuy nhiên, bạn cần phải biết làm điểm khác khung MVC vận hành Theo mặc định, MVC Framework chọn quan điểm dựa giá trị điều khiển liệu định tuyến, tên lớp điều khiển Vì vậy, ví dụ tơi, tơi muốn vị trí dự phòng để làm việc với điểm theo quy ước việc theo tên điều khiển tổ chức, cần phải thay đổi giá trị điều khiển định tuyến tính, này: requestContext.RouteData.Values ["controller"] = "Product"; Sự thay đổi gây MVC Framework để tìm kiếm quan điểm kết hợp với điều khiển dự phòng khơng điều khiển hệ thống định tuyến xác định dựa URL mà người dùng yêu cầu Có hai điểm quan trọng đây: thứ không nhà máy điều khiển có trách nhiệm cho phù hợp yêu cầu để điều khiển, thay đổi theo yêu cầu để thay đổi hành vi bước đường ống xử lý yêu cầu.Đây công cụ mạnh đặc tính quan trọng MVC Framework Điểm thứ hai bạn tự làm theo điều bạn muốn ước nhà máy điều khiển bạn, bạn cần phải biết cơng ước cho phận khác MVC Framework Và, thành phần khác thay với mã tùy chỉnh tốt (như chứng minh cho quan điểm Chương 20), có ý nghĩa để làm theo nhiều người số công ước cho phép thành phần phát triển sử dụng độc lập với LỚP ĐIỀU KHIỂN TỨC THÌ Khơng có quy định cách bạn tạo lớp điều khiển bạn, thực hành tốt để sử dụng giải phụ thuộc mà giới thiệu chương Điều cho phép bạn để giữ cho máy điều khiển tùy chỉnh bạn tập trung vào yêu cầu lập đồ để điều khiển lớp học, để lại vấn đề phụ thuộc tiêm để xử lý riêng cho tồn ứng dụng Bạn xem sử dụng lớp DependencyResolver để tạo điều khiển trường hợp: return targetType == null ? null : (IController)DependencyResolver.Current.GetService(targetType) ; Các tài sản DependencyResolver.Current tĩnh trả thực Giao diện IDependencyResolver, xác định phương pháp GetService Bạn vượt qua đối tượng System.Type để phương pháp có thể trở lại Có phiên mạnh mẽ đánh máy phương pháp GetService, tơi làm khơng biết loại tơi đối phó với trước, tơi sử dụng phiên trả đối tượng sau thực rõ ràng trường hợp để IController Chú ý: Chú ý không sử dụng trình giải phụ thuộc để giải vấn đề chặt khớp nối lớp Thay vào đó, tơi u cầu để tạo thể loại mà tơi định để kiểm tra phụ thuộc lớp điều khiển tuyên bố giải chúng Tôi không thiết lập Ninject chương này, điều có nghĩa resolver mặc định sử dụng đơn giản tạo trường hợp cách tìm nhà xây dựng khơng tham số gọi cho họ Tuy nhiên, cách xây dựng nhà máy sản xuất điều khiển để sử dụng lớp DependencyResolver, tơi đảm bảo tơi liên tục tận dụng nhiều phân giải phụ thuộc cao cấp Ninject thêm vào dự án TRIỂN KHAI THỰC HIỆN CÁC PHƯƠNG PHÁP GIAO DIỆN KHÁC Hai phương pháp khác giao diện IControllerFactory: Phương pháp GetControllerSessionBehavior sử dụng MVC Framework để xác định xem phiên liệu nên trì điều khiển Tôi trở lại vấn đề "Sử dụng Sessionless Controllers" sau chương Phương pháp ReleaseController gọi đối tượng điều khiển tạo CreateController khơng cần thiết Trong thực ví dụ tơi, tơi kiểm tra để xem lớp thực giao diện IDisposable Nếu có, tơi gọi phương thức Dispose để giải phóng tài nguyên giải phóng Triển khai thực tơi phương pháp GetControllerSessionBehavior ReleaseController phù hợp cho hầu hết dự án sử dụng nguyên văn (mặc dù bạn nên đọc phần điều khiển sessionless sau để chắn bạn hiểu tùy chọn có sẵn) ĐĂNG KÝ MỘT MÁY ĐIỀU KHIỂN TÙY CHỈNH Tơi nói MVC Framework sử dụng máy điều khiển tùy chỉnh thông qua lớp ControllerBuilder Bạn cần phải đăng ký điều khiển nhà máy tùy chỉnh ứng dụng bắt đầu, có nghĩa sử dụng phương pháp Application_Start file Global.asax.cs, thể Listing 19-7 Listing 19-7 Đăng ký máy điều khiển tùy chỉnh tập tin Global.asax Khi nhà máy điều khiển đăng ký, chịu trách nhiệm xử lý tất yêu cầu mà ứng dụng nhận Bạn xem hiệu nhà máy tùy chỉnh cách khởi động ứng dụng Các trình duyệt yêu cầu URL gốc, ánh xạ tới điều khiển Trang chủ hệ thống định tuyến Các nhà máy tùy chỉnh xử lý yêu cầu cho chủ điều khiển cách tạo thể lớp ProductController , mà sản xuất kết thể hình 19-2 Hình 19-2 Sử dụng máy điều khiển tùy chỉnh LÀM VIỆC VỚI CÁC ĐIỀU KHIỂN MÁY BUILT-IN Tôi cho bạn làm để tạo máy điều khiển tùy chỉnh cách hiệu để chứng minh điều khiển nhà máy làm hoạt động Đối với hầu hết ứng dụng, nhiên, lớp nhà máy điều khiển tích hợp, gọi DefaultControllerFactory, hồn tồn phù hợp Khi nhận yêu cầu từ hệ thống định tuyến, nhà máy nhìn vào liệu định tuyến để tìm giá trị tài sản điều khiển cố gắng tìm lớp học ứng dụng Web đáp ứng tiêu chí sau đây: Các lớp phải công khai Các lớp phải cụ thể (không trừu tượng) Các lớp thông số chung chung Tên lớp phải kết thúc với Controller Các lớp phải thực giao diện IController Lớp DefaultControllerFactory trì danh sách lớp học ứng dụng, khơng cần phải thực tìm kiếm yêu cầu đến Nếu lớp học phù hợp tìm thấy, sau thể tạo cách sử dụng điều khiển kích hoạt (Tơi trở lại vấn đề phần tới "Tùy chỉnh điều khiển DefaultControllerFactory"), cơng việc điều khiển hồn tất Nếu khơng có điều khiển phù hợp, sau yêu cầu không xử lý thêm Chú ý lớp DefaultControllerFactory sau mơ hình convention-over-configuration Bạn khơng cần phải đăng ký điều khiển bạn tập tin cấu hình, nhà máy tìm thấy chúng cho bạn Tất bạn cần làm tạo lớp đáp ứng tiêu chí mà nhà máy tìm kiếm Nếu bạn muốn tạo hành vi điều khiển nhà máy tùy chỉnh, bạn cấu hình thiết lập mặc định nhà máy ghi đè lên số phương pháp Bằng cách này, bạn xây dựng hành vi hữu ích convention-over-configuration mà khơng cần phải tái tạo nó, nhiệm vụ mà, tơi nói trước đó, phức tạp đau đớn Trong phần tiếp theo, cho bạn cách khác để điều chỉnh tạo điều khiển ƯU TIÊN NAMESPACES Trong Chương 16, cho bạn làm để ưu tiên nhiều không gian tên tạo tuyến đường Điều giải nhập nhằng Vấn đề điều khiển, nơi mà lớp điều khiển có tên cư trú không gian tên khác Nó DefaultControllerFactory xử lý danh sách không gian tên ưu tiên cho họ Mẹo ưu tiên toàn cầu ghi đè tuyến đường cụ thể ưu tiên Điều có nghĩa bạn xác định Áp dụng thuộc tính ghi đè tên hành động Điều có nghĩa URL mà trực tiếp nhắm vào phương pháp Danh sách không làm việc lâu hơn, thể hình 19-6 Hình 19-6 Sử dụng tên phương thức hành động thuộc tính ActionName áp dụng Có hai lý bạn muốn ghi đè lên tên phương thức theo cách này: Sau bạn chấp nhận tên hành động khơng pháp luật phương thức tên C # (ví dụ, [ActionName ("User-Đăng ký")]).Nếu bạn muốn có hai phương pháp C # khác mà chấp nhận tập hợp thông số nên xử lý hành động tương tự tên, để đáp ứng yêu cầu HTTP loại khác (ví dụ, với [HttpGet] khác với [HttpPost]), bạn cung cấp cho phương pháp tên C # khác để đáp ứng trình biên dịch, sau sử dụng [ActionName] để lập đồ hai đến tên hành động tương tự SỬ DỤNG PHƯƠNG PHÁP HÀNH ĐỘNG LỰA CHỌN Nó thường trường hợp điều khiển chứa vài hành động có tên Điều có nhiều phương pháp, với thơng số khác nhau, bạn sử dụng thuộc tính ActionName, nhờ nhiều phương pháp đại diện cho hành động tương tự Trong tình này, MVC Framework cần số trợ giúp lựa chọn hành động phù hợp để xử lý yêu cầu Các chế để làm điều gọi chọn phương pháp hành động Nó cho phép bạn xác định loại yêu cầu hành động sẵn sàng qui trình Bạn thấy ví dụ lựa chọn phương thức hành động bị hạn chế hành động cách sử dụng HttpPost thuộc tính tơi xây dựng ứng dụng SportsStore Tơi có hai phương pháp gọi Thanh toán điều khiển Cart tơi sử dụng HttpPost thuộc tính để số họ sử dụng cho yêu cầu HTTP POST, thể Listing 19-16 Listing 19-16 Sử dụng Attribute HttpPost Invoker hành động sử dụng phương pháp hành động để giải mơ hồ selectors lựa chọn hành động Trong Listing 19-16, có hai ứng cử viên cho hành động Checkout The Invoker ưu tiên cho hành động mà có chọn lọc Trong trường hợp này, HttpPost chọn đánh giá để xem yêu cầu xử lý Nếu có thể, phương pháp mà sử dụng Nếu không, sau phương pháp khác, khơng có thuộc tính, sử dụng Có xây dựng thuộc tính mà làm việc chọn lọc dùng cho loại khác yêu cầu HTTP: HttpPost cho yêu cầu POST, HttpGet cho yêu cầu GET, HttpPut cho yêu cầu PUT, Một thuộc tính xây dựng-in NonAction, mà cho invoker hành động mà phương pháp mà không coi phương pháp hành động hợp lệ khơng nên sử dụng Bạn xem áp dụng thuộc tính NonAction Listing 19-17, nơi tơi xác định phương pháp hành động Điều khiển khách hàng Listing 19-17 Sử dụng NonAction Selector CustomerController.cs file Phương pháp MyAction danh sách không coi phương pháp hành động, đáp ứng tất tiêu chí mà invoker trơng cho Điều hữu ích cho việc đảm bảo bạn không vạch trần hoạt động lớp điều khiển bạn hành động Tất nhiên, phương pháp thông thường nên đơn giản đánh dấu riêng, mà ngăn cản chúng gọi hành động; Tuy nhiên, [NonAction] hữu ích lý bạn phải đánh dấu phương thức public Các yêu cầu cho URL phương pháp mục tiêu NonAction tạo 404-Not Found lỗi, thể hình 19-7 Hình 19-7 Tác động việc yêu cầu URL mà mục tiêu phương pháp NonAction TẠO MỘT SELECTOR TUỲ CHỈNH PHƯƠNG PHÁP HÀNH ĐỘNG Selectors phương pháp hành động bắt nguồn từ lớp ActionMethodSelectorAttribute, thể Listing 19-18 Listing 19-18 Các Lớp ActionMethodSelectorAttribute Các ActionMethodSelectorAttribute trừu tượng định nghĩa phương thức trừu tượng: IsValidForRequest Các tham số cho phương pháp đối tượng ControllerContext, mà cho phép bạn kiểm tra yêu cầu, đối tượng MethodInfo, mà bạn sử dụng để có thông tin phương pháp chọn bạnđã áp dụng Bạn quay trở lại từ IsValidForRequest phương pháp xử lý u cầu, khơng sai Tơi tạo phương pháp hành động tùy chọn đơn giản file class, LocalAttribute.cs, mà thêm vào Thư mục sở hạ tầng dự án ví dụ, Listing 19-19 Listing 19-19 Nội dung tập tin LocalAttribute.cs Tôi ghi đè phương pháp IsValidForRequest để trả true yêu cầu bắt nguồn từ máy địa phương Để chứng minh phương pháp hành động tùy chọn, tạo điều khiển Home dự án ví dụ, Listing 19-20 Listing 19-20 Nội dung tập tin HomeController.cs Tôi sử dụng thuộc tính ActionName để tạo tình có hai phương thức hoạt động Index Tại thời điểm ,các hoạt động invoker khơng có cách để tìm nên sử dụng yêu cầu truy cập đến URL / Home / Index tạo lỗi hình 19-8 có u cầu Hình 19-8 Các lỗi hiển thị có phương thức cập không rõ ràng Để giải tình này, tơi áp dụng phương thức tùy chỉnh lựa chọn thuộc tính cho phương thức không rõ ràng, Listing 19-21 Listing 19-21 Áp dụng phương thức lựa chọn thuộc tính tập tin HomeController.cs Nếu bạn khởi động lại ứng dụng điều hướng đến URL gốc từ trình duyệt chạy máy cục bộ, bạn thấy MVC Framework lấy phương pháp lựa chọn thuộc tính vào tài khoản để giải không xác định phương pháp lớp điều khiển, hình 19-9 Hình 19-9 Sử dụng phương pháp lựa chọn thuộc tính để giải phương thức hoạt động không rõ ràng PHƯƠNG THỨC HOẠT ĐỘNG QUI TRÌNH ĐỊNH HƯỚNG Bây bạn thấy bên phương pháp hoạt động chọn lớp bản, bạn hiểu invoker hoạt động để lựa chọn phương thức hoạt động The invoker bắt đầu trình với danh sách ứng cử viên có thể, phương pháp điều khiển đáp ứng tiêu chuẩn phương pháp hoạt động Sau trải qua tiến trình sau đây: - The invoker loại bỏ phương pháp dựa vào tên Chỉ có phương pháp có tên giống tiêu chí hoạt động có thuộc tính ActionName thích hợp lưu giữ danh sách - The invoker loại bỏ phương pháp có thuộc tính chọn phương pháp hành động trả false cho yêu cầu - Nếu có xác phương thức hành động với chọn bên trái, phương pháp sử dụng Nếu có nhiều phương pháp với lựa chọn, sau ngoại lệ đặt ra, invoker hành động khơng thể mập mờ phương pháp có sẵn - Nếu khơng có phương pháp hoạt động với chọn, sau invoker nhìn vào khơng có chọn Nếu có xác phương thức chẳng hạn , gọi invokerd Nếu có nhiều phương pháp mà khơng có chọn, ngoại lệ loại ra,vì invoker lựa chọn chúng GIẢI QUYẾT CÁC HOẠT ĐỘNG KHƠNG XÁC ĐỊNH Nếu invoker hoạt động khơng thể tìm thấy phương pháp hành động để gọi, trả failse từ phương pháp InvokeAction Khi xảy ra, lớp điều khiển gọi phương pháp HandleUnknownAction Theo mặc định, phương thức trả 404-Not Found cho khách hàng Đây điều hữu ích mà điều khiển làm cho hầu hết ứng dụng, bạn chọn ghi đè phương pháp lớp điều khiển bạn bạn muốn làm đặc biệt Listing 19-22 cung cấp trình diễn trọng phương pháp HandleUnknownAction điều khiển Home Listing 19-22 Phương pháp ghi đè HandleUnknownActon HomeController.cs file Nếu bạn khởi động ứng dụng điều hướng đến URL nhắm đến phương pháp hành động không tồn tại, bạn thấy phản ứng thể Hình 19-10 Hình 19-10 Đối phó với yêu cầu cho phương thức hoạt động không tồn Cải thiện Hiệu suất điều khiển chuyên dụng -Các MVC Framework cung cấp hai loại đặc biệt điều khiển cải thiện hiệu suất web MVC ứng dụng bạn Giống tối ưu hóa hiệu suất, liên kết điều khiển đại diện, đơn giản hóa giảm chức Trong phần tiếp theo, minh họa loại điều khiển nêu lợi ích thiếu sót của chúng Sử dụng Sessionless Controllers Theo mặc định, điều khiển hỗ trợ sesion state, sử dụng để lưu trữ giá trị liệu qua yêu cầu, giúp công việc dễ dàng cho lập trình viên MVC Tạo trì sesion state trình liên quan với Dữ liệu phải lưu trữ truy xuất, phiên thân phải quản lý để chúng hết hạn hợp lý Phiên liệu tiêu thụ nhớ máy chủ khơng gian số vị trí lưu trữ khác, cần phải đồng hóa liệu nhiều máy chủ Web làm cho khó khăn để chạy ứng dụng bạn hệ thống máy chủ Để đơn giản hóa sesion state, ASP NET xử lý có truy vấn cho phiên thời gian Nếu khách hàng làm nhiều yêu cầu chồng chéo, họ xếp hàng xử lý máy chủ Lợi ích bạn khơng cần lo lắng nhiều yêu cầu sửa đổi liệu tương tự Nhược điểm bạn không nhận yêu cầu băng thông bạn muốn Không phải tất điều khiển cần tính sesion state Trong trường hợp vậy, bạn cải thiện hiệu suất ứng dụng bạn cách tránh việc làm liên quan đến việc trì trạng thái phiên Bạn làm điều cách sử dụng sessionless controller Đây thường xuyên điều khiển, với hai trường hợp ngoại lệ: MVC Framework không tải lưu trạng thái phiên làm chúng sử dụng để xử lý yêu cầu, yêu cầu chồng chéo xử lý đồng thời Quản lý trạng thái phiên IControllerFactory tuỳ chỉnh Vào đầu chương này, cho bạn giao diện IControllerFactory chứa phương pháp gọi GetControllerSessionBehavior, mà trả giá trị từ SessionStateBehavior bảng kê Bảng Listing có chứa bốn giá trị để cấu hình trạng thái phiên điều khiển, mô tả Bảng 19-4 Bảng 19-4 Các giá trị SessionStateBehavior bảng Listing Một nhà máy kiểm soát thực hóa giao diện IControllerFactory trực tiếp lập hành vi trạng thái Session cho điều khiển cách trả lại giá trị SessionStateBehavior từ phương thức GetControllerSessionBehavior Các tham số cho phương pháp đối tượng RequestContext chuỗi chứa tên điều khiển Bạn trả lại bốn giá trị hiển thị bảng, bạn trả giá trị khác cho điều khiển khác Để minh họa, thay đổi việc thực phương pháp GetControllerSessionBehavior Lớp CustomControllerFactory mà tạo chương trước, thể Listing 19-23 Bảng liệt 19-23 Xác định trạng thái Session Controller CustomControllerFactory.cs file Quản lý trạng thái Session sử dụng DefaultController Factory Khi bạn sử dụng máy kiểm sốt tích hợp, bạn kiểm sốt trạng thái session cách áp dụng thuộc tính sessionState để lớp điều khiển cá nhân, Listing 19-24 nơi mà tạo điều khiển gọi FastController Listing 19-24 Sử dụng thuộc tính sessionState FastController.cs file Các thuộc tính sessionState áp dụng cho lớp điều khiển ảnh hưởng đến tất hành động điều khiển Khối tham số cho thuộc tính giá trị thuộc kiểu Listing SessionStateBehavior Trong ví dụ này, tơi bị vơ hiệu hóa trạng thái session hồn tồn, có nghĩa cố gắng thiết lập giá trị session điều khiển, này: Các MVC Framework bỏ ngoại lệ hành động gọi xem trả lại Mẹo: Khi trạng thái phiên bị Disabled, HttpContext.Session null Nếu bạn xác định hành vi ReadOnly, sau bạn đọc giá trị thiết lập điều khiển khác, bạn nhận thiết lập thời gian thực bạn cố gắng đặt sửa đổi giá trị Bạn nhận thơng tin chi tiết phiên thông qua HttpContext.Session cố gắng để thay đổi giá trị nguyên nhân gây lỗi Mẹo: Nếu bạn đơn giản cố gắng để truyền liệu từ điều khiển để xem, xem xét sử dụng tính View Bag thay thế, điều khơng bị ảnh hưởng thuộc tính sessionState Sử dụng điều khiển không đồng Bên tảng ASP.net pool of NET threads sửa dụng để xử lý yêu cầu khách hàng Cái pool gọi worker thread pool Khi nhận yêu cầu, worker thread lấy từ Pool giao nhiệm vụ xử lý yêu cầu Khi yêu cầu xử lý, worker thread trở lại Pool, mà có sẵn để xử lý yêu cầu chúng đến Có hai lợi ích việc sử dụng thread-pool cho ứng dụng ASP.NET: -Bằng cách dùng lại worker thread, bạn tránh việc tạo bạn xử lý yêu cầu -Bởi có số lượng định worker thread có sẵn, bạn tránh tình mà bạn đồng thời yêu cầu nhiều xử lý cho máy chủ bạn xử lý ứng dụng : Các worker thread pool hoạt động tốt yêu cầu xử lý thời gian ngắn Đây trường hợp hầu hết MVC ứng dụng Tuy nhiên, bạn có hành động mà phụ thuộc vào máy chủ khác phải nhiều thời gian để hoàn thành, bạn đạt mục tiêu mà tất worker thread bạn đưa lên hàng chờ cho hệ thống khác để hoàn thành công việc họ Chú ý: Trong phần này, giả định bạn quen thuộc với Task Parallel Library (TPL) Nếu bạn muốn tìm hiểu TPL, xem sách chủ đề này, gọi Pro.NET Parallel Programming in C#, xuất Apress -Máy chủ bạn có khả làm nhiều việc (Sau cùng, bạn chờ đợi, mà chiếm tài nguyên bạn), bạn gắn lưu tất worker thread bạn, yêu cầu gửi đến xếp hàng Bạn trạng thái đơn lẻ để chạy ứng dụng bạn phần lớn máy chủ nhàn rỗi Cảnh báo: Tại thời điểm này, số độc giả nghĩ họ viết work thread pool thiết kế riêng cho ứng dụng họ Đừng làm việc Lập trình dễ dàng Lập trình song song works khó khăn Nếu bạn người đến lập trình song song, sau bạn thiếu kỹ cần thiết Lời khun tơi để dính với pool mặc định Nếu bạn có kinh nghiệm lập trình song song, sau bạn biết lợi ích biên so với nỗ lực mã hóa thử nghiệm pool thread Các giải pháp cho vấn đề sử dụng điều khiển không đồng Điều làm tăng hiệu suất tổng thể ứng dụng bạn,nhưng không mang lại lợi ích cho việc thực hoạt động không đồng bạn Lưu ý: Bộ điều khiển khơng đồng có ích cho hành động I / O networkbound không CPU-ntensive Các vấn đề bạn cố gắng để giải với điều khiển không đồng khơng phù hợp mơ hình pool kiểu nhập yêu cầu bạn thực thi Pool thiết kế để đảm bảo yêu cầu mảng phù hợp nguồn tài nguyên máy chủ, bạn kết thúc với thiết work threads mà khơng làm Nếu bạn sử dụng threads bổ sung cho hoạt động chuyên sâu CPU, sau bạn pha lỗng thành tài nguyên máy chủ qua nhiều yêu cầu đồng thời Tạo Ví dụ Để bắt đầu thăm dò điều khiển không đồng bộ, cho bạn ví dụ loại vấn đề mà họ có nhằm giải Listing 19-25: cho thấy điều khiển đồng đặn gọi RemoteData mà tơi thêm vào dự án ví dụ : Listing 19-25 Nội dung tập tin RemoteDataController.cs Bộ điều khiển có chứa phương thức hoạt động, liệu, tạo cá thể lớp mơ hình RemoteService gọi phương thức GetRemoteData vào Phương pháp ví dụ việc tiêu tốn thời gian, hoạt động CPU thấp lớp RemoteService, mà định nghĩa tập tin gọi lớp RemoteService.cs thư mục Models, hiển thị Listing 19-26: Listing 19-26 Nội dung RemoteService cs file Rồi, công nhận chúng: Tôi làm giả phương pháp GetRemoteData Trong giới thực, phương pháp truy xuất liệu phức tạp kết nối mạng chậm, để giữ cho thứ đơn giản, sử dụng phương pháp Thread.Sleep để mô việc trễ giây Việc bổ sung cuối cần nhìn Tơi tạo Views / Remote thư mục liệu thêm Data.cs.html xem tập tin cho nó, nội dung hiển thị Listing 19-27 Listing 19-27 Nội dung liệu cshtml file Khi bạn chạy ứng dụng điều hướng đến / RemoteData / Data URL, phương thức hoạt động gọi, đối tượng RemoteService tạo ra, phương thức GetRemoteData gọi Sau hai giây (mô hoạt động thực), liệu trả từ phương thức GetRemoteData, thông qua để xem trả lại hình 19-11 Hình 19-11 Điều hướng đến / RemoteData /Data URL Vấn đề worker thread yêu cầu xử lý hai giây nhàn rỗi Nó chẳng làm hữu ích, khơng có sẵn để xử lý yêu cầu khác đợi Thận trọng: Sử dụng điều khiển không đồng giải phóng worker thread để xử lý truy vấn khác Nó khơng ngăn chặn người sử dụng từ trải qua two-second chờ đợi Sau tất cả, liệu giả thu xử lý Có client-side kỹ thuật mà bạn sử dụng để thực yêu cầu khơng đồng trình duyệt, cho phép bạn giữ cho người sử dụng thơng báo tiến độ nhận liệu cho phép họ tiếp tục làm việc với phần khác ứng dụng xem Pro ASP NET MVC Client book, xuất Apress năm 2014, để biết chi tiết Tạo điều khiển không đồng Sau cho bạn vấn đề tơi giải quyết, tơi tiến lên để tạo điều khiển không đồng Có hai cách để tạo điều khiển không đồng Một để thực System.Web.Mvc.Async.Async điều khiển giao diện, tương đương với không đồng IController Tôi không chứng minh phương pháp tiếp cận, đòi hỏi nhiều lời giải thích sở lập trình song song NET Mẹo: Không phải tất hành động điều khiển không đồng cần phải đồng Bạn đưa phương pháp đồng tốt,chúng hành xử mong đợi Tôi muốn lại tập trung vào MVC Framework, lý chứng minh phương pháp thứ hai: sử dụng chờ đợi từ khóa async điều khiển thông thường Trong phiên trước NET Framework, tạo nên điều khiển khơng đồng q trình phức tạp yêu cầu xuất phát từ điều khiển hành động lớp tách biệt thành hai phương pháp Tin await từ khố async, mà tơi mơ tả Chương 4, đơn giản hóa q trình nhiều: bạn tạo đối tượng Task await phản ứng nó, thể Listing 19-28 Mẹo: Các phương pháp cũ việc tạo phương thức hoạt động không đồng hỗ trợ, cách tiếp cận mô tả lịch điều khuyên Một tạo phẩm cách tiếp cận cũ bạn sử dụng tên phương thức hoạt động mà kết thúc với Async (ví dụ, IndexAsync) Completed (ví dụ, IndexCompleted) Listing 19-28 Tạo điều khiển không đồng RemoteDataController cs file Tôi tái cấu phương thức hoạt động để trả Task , áp dụng async từ khóa await, tạo Task , chịu trách nhiệm kêu gọi phương thức GetRemoteData Áp dụng phương pháp không đồng điều khiển Bạn sử dụng điều khiển không đồng để dùng phương pháp không đồng nơi khác ứng dụng bạn Để làm sáng tỏ chúng, thêm phương pháp không đồng với lớp RemoteService, thể Listing 19-29 Listing 19-29 Thêm phương pháp không đồng RemoteService cs file Kết từ phương thức GetRemoteDataAsync Task , hiệu suất vài tin nhắn tương tự Phương thức đồng hồn thành Trong Listing 1930, bạn nhìn thấy o tơi dùng phương pháp không đồng phương pháp hành động mà thêm vào điều khiển RemoteData Listing 19-30 phương pháp tiêu tốn không đồng điều khiển RemoteData Bạn thấy hai phương thức hoạt động theo mơ hình giống khác biệt nơi đối tượng Task tạo Kết cách gọi phương thức hoạt động work threads không gắn lên chờ đợi cho gọi GetRemoteData để hồn thành, có nghĩa chủ đề có sẵn để xử lý yêu cầu khác mà cải thiện đáng kể hiệu suất ứng dụng MVC Framework bạn Tóm tắt Trong chương này, bạn thấy cách MVC Framework tạo điều khiển gọi phương thức Tôi khám phá tùy chỉnh xây dựng việc triển khai build-in giao diện chính, tạo phiên tùy chỉnh để chứng minh làm để chúng làm việc Bạn biết phương thức hoạt động chọn lọc sử dụng để phân biệt phương thức hoạt động nhìn thấy số loại đặc biệt điều khiển sử dụng để tăng khả xử lý yêu cầu ứng dụng bạn Các chủ đề chương mở rộng Hầu khía cạnh MVC Framework sửa đổi thay hoàn toàn Đối với hầu hết dự án, tiêu chuẩn mặc định hoàn toàn đầy đủ Nhưng có kiến thức làm việc MVC Framework phù hợp với giúp bạn thực thiết kế thơng tin định coding (và mặt thú vị) Trong chương tiếp theo, tơi quay sang khía cạnh quan điểm Tơi giải thích làm họ làm việc và, bạn mong đợi doanh nghiệp, làm để cấu hình tùy chỉnh tiêu chuẩn mặc định ... tạo số điều khiển Listing 19- 3 cho thấy Điều khiển sản phẩm Listing 19- 3: Nội dung tập tin Product Controller.cs Listing 19- 4 diễn tả Điều khiển khách hang Listing 19- 4: Nội dung tập tin CustomerController.cs... giản file class, LocalAttribute.cs, mà thêm vào Thư mục sở hạ tầng dự án ví dụ, Listing 19- 19 Listing 19- 19 Nội dung tập tin LocalAttribute.cs Tôi ghi đè phương pháp IsValidForRequest để trả true... cuối tơi cần nhìn Tôi tạo Views / Remote thư mục liệu thêm Data.cs.html xem tập tin cho nó, nội dung hiển thị Listing 19- 27 Listing 19- 27 Nội dung liệu cshtml file Khi bạn chạy ứng dụng điều hướng