2009-07-23 3 views
23

Có cách nào để chỉ định rằng một Bộ điều khiển hoặc Hành động đã cho sử dụng trạng thái Phiên theo cách chỉ đọc không? Trong "cũ" ASP.NET, chúng tôi đã từng làm một việc như sau:Chỉ định phiên chỉ đọc trong ASP.NET MVC

<%@ Page EnableSessionState="ReadOnly" %> 

Có tương đương với ASP.NET MVC không? Tôi đang tìm cách cho phép ứng dụng của tôi phân phát nhiều yêu cầu từ cùng một máy khách cùng một lúc và tắt hoàn toàn phiên là tùy chọn -not- trong trường hợp của tôi.

+0

thể trùng lặp của [Disable phiên bang mỗi yêu cầu trong ASP.Net MVC] (http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam

Trả lời

8

Một câu hỏi tương tự đã được hỏi ở đây: Disable Session state per-request in ASP.Net MVC

Các thỏa thuận trả lời chấp nhận với việc tạo ra một handler đường tùy chỉnh mà cuối cùng bỏ qua ràng buộc để phiên. Điều này không chính xác trả lời câu hỏi của bạn (đó là cách khai báo nhiều hành động để sử dụng truy cập phiên chỉ đọc), nhưng nó dường như đủ liên quan để đề cập đến.

1

Điều này có thể hơi phức tạp - sự hiểu biết của tôi là thiết lập trạng thái phiên là điều đã xảy ra ở cấp IHttpHandler. Với trình xử lý tùy chỉnh, bạn có thể chỉ định trạng thái phiên bằng cách sử dụng các giao diện điểm đánh dấu, như IReadOnlySessionState để khai báo rằng nó chỉ cần trạng thái phiên chỉ đọc. Bạn có thể thử gắn nó vào bộ điều khiển của bạn và xem nó bay như thế nào. Tôi nghi ngờ nó sẽ không phải vì bộ điều khiển ASP.NET MVC xảy ra tốt sau khi IHttpHandler được nối dây, nhưng nó là giá trị một shot.

Một giải pháp khác có thể là bao gồm các biến trạng thái phiên trong lớp của riêng bạn và hiển thị phiên bản chỉ đọc để thực thi chỉ đọc. Truy cập nó qua nhiều yêu cầu không phải là một vấn đề, nhưng bạn chính xác rằng bạn có thể nhận được điều kiện chủng tộc và như vậy nếu bạn bắt đầu cố gắng ghi vào cùng một biến phiên từ nhiều góc độ.

+0

Mục tiêu không phải là để biến các biến chỉ đọc, mục đích là cho phép nhiều yêu cầu đồng thời tới các trang MVC từ một máy khách duy nhất. Việc gói các biến phiên trong một trình bao bọc chỉ đọc sẽ không giúp điều đó. – Mark

+0

Tôi đoán tôi không hoàn toàn theo dõi bạn sau đó - tại sao ReadOnly lại quan trọng nếu không tránh điều kiện cuộc đua khi có thể cập nhật đồng thời? Nếu tất cả các trang của bạn chỉ đọc dữ liệu phiên, thì các yêu cầu đồng thời sẽ không bị tổn thương. Nếu tất cả các trang của bạn cần phải cập nhật phiên đồng thời, sau đó gói các công cụ như ReadOnly sẽ không giúp đỡ. –

+1

Các vấn đề chỉ đọc vì thời gian chạy ASP.NET sẽ không cho phép nhiều yêu cầu từ cùng một máy khách trừ khi phiên chỉ đọc được chỉ định. Tôi không thể CÓ yêu cầu đồng thời trừ khi tôi chỉ định phiên chỉ đọc, và câu hỏi hỏi làm thế nào để làm điều đó trong ASP.NET MVC. – Mark

-2

Điều gì về việc đặt dữ liệu bạn muốn là "Chỉ đọc" là tĩnh trong Mô hình của bạn? Bằng cách này, bạn có thể có các yêu cầu đồng thời với MVC với cùng một dữ liệu.

+2

Vấn đề luồng không phải là những gì tôi đang cố gắng giải quyết ở đây, vấn đề là ASP.NET sẽ không cho phép một ứng dụng web xử lý nhiều yêu cầu từ cùng một máy khách cùng một lúc trừ khi nó nghĩ rằng trạng thái phiên bị tắt hoặc xử lý các yêu cầu cụ thể sẽ không sửa đổi trạng thái phiên. Việc tạo các trường trong mô hình tĩnh sẽ không thông báo cho ASP.NET rằng trạng thái phiên là chỉ đọc. – Mark