Helpex - Trao đổi & giúp đỡ Đăng nhập
35

Thành viên mới của AJAX đây!
Hiện tại trong ứng dụng web ASP.NET MVC của tôi, các yêu cầu AJAX của tôi dường như đang được phân lô hoặc xếp hàng đợi, tôi không chắc.
Có vẻ như không có yêu cầu nào được hoàn thành cho đến khi yêu cầu trước đó hoàn thành.
Làm cách nào để nhận được các yêu cầu trả về một cách độc lập?
Tôi không nhất thiết muốn ai đó cho tôi câu trả lời nhưng có thể một số liên kết đến các hướng dẫn hoặc tài nguyên tốt có thể hữu ích. Cảm ơn

35 hữu ích 1 bình luận 18k xem chia sẻ
39

Tôi đang mở rộng câu trả lời của Lachlan Roche, câu trả lời là chính xác.

Khung ASP.NET sẽ yêu cầu "đơn luồng" xử lý phạm vi Phiên (một tài nguyên toàn cầu), để ngăn một yêu cầu can thiệp vào một yêu cầu khác. Trong WebForms, tôi nghĩ bạn có thể sử dụng chỉ thị Trang để chỉ định rằng các trang riêng lẻ không sử dụng Phiên và do đó không cần phải xử lý đồng bộ như thế này.

Vấn đề là trong ASP.NET MVC, tất cả các yêu cầu đều sử dụng Session , vì nó được sử dụng để triển khai TempData. Bạn có thể vô hiệu hóa hoàn toàn trạng thái phiên, như Lachlan Roche đã chỉ ra hoặc bạn có thể giải quyết vấn đề này theo từng trường hợp cụ thể.

Một giải pháp khả thi có thể là bắt đầu các chuỗi nền của riêng bạn để xử lý bất kỳ mã nào đang chạy lâu, để yêu cầu ban đầu "hoàn thành" càng nhanh càng tốt.

39 hữu ích 0 bình luận chia sẻ
36

ASP.NET sẽ xử lý tuần tự các yêu cầu trên cơ sở mỗi phiên trừ khi các phiên được định cấu hình là bị vô hiệu hóa hoặc chỉ đọc trong web.config thông qua thuộc tính enableSessionState trên phần tử trang.

Vì đây là cài đặt trang, điều này sẽ không ảnh hưởng đến bộ điều khiển MVC và chúng sẽ vẫn phải xử lý yêu cầu nối tiếp.

Thật kỳ lạ, ngay cả khi các phiên bị vô hiệu hóa hoặc được đặt thành chỉ đọc, chúng tôi vẫn có thể đọc và ghi dữ liệu phiên. Nó dường như chỉ ảnh hưởng đến khóa phiên gây ra quá trình xử lý yêu cầu nối tiếp.

<system.web>
    <pages enableSessionState="ReadOnly"/>
</system.web>

Các trang cũng có thể có thuộc tính enableSessionState, mặc dù điều này không liên quan đến lượt xem MVC.

<%@ Page EnableSessionState="True" %>
36 hữu ích 3 bình luận chia sẻ
31

Với việc phát hành ASP.MVC 3, giờ đây bạn có thể thêm một thuộc tính vào bộ điều khiển của mình để đánh dấu Phiên là chỉ đọc, cho phép các hành động được gọi đồng thời từ cùng một máy khách.

Hỗ trợ bộ điều khiển không phiên:

Bộ điều khiển không phiên là một tính năng mới tuyệt vời khác trong ASP.NET MVC 3. Với Bộ điều khiển không phiên, bạn có thể dễ dàng kiểm soát hành vi phiên của mình cho bộ điều khiển. Ví dụ: bạn có thể đặt Phiên của HomeController của mình ở dạng Tắt hoặc Chỉ đọc, cho phép thực hiện yêu cầu đồng thời cho một người dùng. Để biết chi tiết, hãy xem Yêu cầu đồng thời trong ASP.NET MVCHowTo: Bộ điều khiển không phiên trong MVC3 - cái gì & và tại sao? .

- từ bài báo này của DZone .

Bằng cách thêm SessionState(SessionStateBehaviour.Disabled)vào bộ điều khiển của bạn, thời gian chạy sẽ cho phép bạn gọi nhiều hành động đồng thời từ cùng một phiên trình duyệt.

Rất tiếc, tôi không nghĩ có cách nào để đánh dấu một hành động để chỉ vô hiệu hóa phiên khi hành động đó được gọi, vì vậy nếu bạn có bộ điều khiển có một số hành động yêu cầu phiên và những hành động khác thì không, bạn sẽ cần để di chuyển những cái không vào một bộ điều khiển riêng biệt.

Trong các phiên bản sau của ASP MVC, bạn có thể trang trí các lớp bộ điều khiển riêng lẻ với SessionStateAttribute

[System.Web.Mvc.SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : Controller 
{
}
31 hữu ích 4 bình luận chia sẻ
2

Kể từ khi .NET Framework v3.0 được phát hành, bạn có thể sử dụng enum "SessionStateBehavior" với SessionStateAttribute:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : BaseController { }
2 hữu ích 0 bình luận chia sẻ
-2

Yêu cầu đồng thời cũng phụ thuộc nhiều hơn vào trình duyệt nếu bạn kích hoạt giả sử 10 yêu cầu đồng thời cho một hành động Sử dụng AJax trong Mozilla và tương tự bằng IE 8 thì bạn sẽ thấy rằng Mozilla có phong cách để kích hoạt một yêu cầu chờ phản hồi của nó và sau đó kích hoạt thứ hai, v.v. trên ... đối với điều này là từng cơ sở trong khi trong IE * điều này kích hoạt khoảng 6 yêu cầu đồng thời tại một thời điểm đến Máy chủ.

Vì vậy, Yêu cầu đồng thời cũng phụ thuộc vào loại trình duyệt.

-2 hữu ích 0 bình luận chia sẻ
-5

Tôi khuyên bạn nên sử dụng jQuery cho nhu cầu ajax của bạn với asp.net mvc, tôi đã sử dụng nó độc quyền và nó cực kỳ dễ dàng.

Về phần hướng dẫn, tôi sẽ xem tại đây: http://docs.jquery.com/Ajax

Có rất nhiều tùy chọn để chơi và tôi cũng khuyên bạn nên tải xuống firebug để bạn có thể xem các yêu cầu khởi chạy không đồng bộ từ trang của mình và xem liệu chúng có kích hoạt hay không và những gì chúng trả về, v.v.

Giống như phía bên kia, yêu cầu AJAX không đồng bộ và không được xếp hàng và tất cả chúng đều trở lại độc lập khi hoàn thành, vì vậy nếu bạn xem trong firebug, bạn sẽ dễ dàng biết được những gì đang diễn ra ở hậu trường và trước khi trình gỡ lỗi nhận được. đánh

-5 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ asp.net mvc ajax asp.net-ajax jquery , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading