2012-05-29 30 views
10

Tôi đã sử dụng Ashx cùng với jQuery. Tôi đã đọc msdn, tôi đang nói về thuộc tính IHttpHandler.IsReusable.Khi nào là một HttpHandler chung (một ashx, giao diện IHttpHandler) có thể tái sử dụng?

Nhận giá trị cho biết liệu một yêu cầu khác có thể sử dụng trường hợp IHttpHandler hay không.

Ý của chúng là "the IHttpHandler instance."? Có phải họ đang cố gắng để làm cho nó giống nhau static cho mọi người xem và sử dụng không? Có thể sử dụng lại cùng một số những gì? (QueryString, cookie, vv?)

Nếu tôi viết những dòng này:

public class MyHttpHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
     context.Response.Write(DateTime.Now.Ticks.ToString());  
     } 

     public bool IsReusable 
     { 
     get { return true; } 
     } 
    } 

nó xuất hiện mỗi yêu cầu sẽ nhận được up-to-date riêng của mình - Giá trị Datetime.

Trả lời

12

Trong ví dụ của bạn, bạn không quản lý bất kỳ trạng thái nào. Bất cứ ai cũng có thể gọi số ProcessRequest nhiều lần tùy ý và họ sẽ nhận được một DateTime mới.

Nhưng nếu bạn đã làm điều này:

private DateTime _dateTime = DateTime.Now; 

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.Write(_dateTime); 
} 

Bây giờ bạn sẽ nhận được câu trả lời giống nhau mỗi thời gian sau khi dụ handler được khởi tạo. Trừ khi ASP.NET tạo ra một cái mới mỗi lần.

IsReusable có thể cho biết liệu lớp trình xử lý của bạn có quản lý bất kỳ trạng thái nào là OK để chia sẻ giữa các yêu cầu riêng biệt hay không. Nếu nó quản lý nhà nước mà không phải là OK để chia sẻ, sau đó nó không có khả năng được bên ngoài idempotent - hoặc thậm chí có thể không thread-an toàn. Gọi ProcessRequest với cùng điều kiện đầu vào có thể không dẫn đến cùng một đầu ra, bởi vì việc xử lý cụ thể của bạn cũng có một số biến cấp cá thể không được chia sẻ khi nó xác định đầu ra. (Và trên thực tế, về mặt kỹ thuật, việc triển khai hiện tại của bạn là một ví dụ về điều đó). Trong những trường hợp này, cá thể có thể không phải là "có thể tái sử dụng" - và ASP.NET cần tạo một cá thể mới mỗi lần để đảm bảo khả năng dự đoán.

Vì vậy, đối với trường hợp bạn không quản lý nhà nước, hoặc bạn có trình xử lý rất đơn giản, nơi trạng thái là "hiển nhiên" (như ví dụ chúng tôi có ở đây), IsResuable có vẻ vô nghĩa. Nhưng nếu bạn có một trình xử lý rất phức tạp - có thể giữ một số trạng thái đắt tiền để khởi tạo nhưng OK để chia sẻ - bạn sẽ muốn chỉ ra cho ASP.NET là OK để sử dụng lại nó để thực hiện.

+2

Tôi không bao giờ có thể tìm thấy tài liệu MSDN thích cho điều này một:/ – IrishChieftain

+0

@IrishChieftain cũng cho câu hỏi này mà ive hỏi (và didnt nhận được bất kỳ asnwer tốt) -lousy MSDN documenetation ... http://stackoverflow.com/questions/8298843/registerclientscriptblock-parameters-usages-in-real-scenario –

+0

Hãy xem phản hồi của Branislav tại đây: http://stackoverflow.com/questions/1507572/streaming-databased-images-using-httphandler – IrishChieftain

0

Nếu bạn có biến mẫu trong đó, tôi nghĩ bạn sẽ thấy nó được chia sẻ qua nhiều cuộc gọi, vì vậy nếu ngày của bạn được đặt làm biến mẫu và bạn chỉ trả về biến trong processrequest, tôi nghĩ rằng nó sẽ trả về cùng một giá trị, trong khi nó sẽ không nếu isreusable = false vì nó sẽ tạo một thể hiện mới của trình xử lý của bạn.

1

Xin lỗi vì đã chỉ đăng một liên kết để câu trả lời, nhưng một lời giải thích tuyệt vời của IsReusable:

IsReusable blog post

Về cơ bản bật tính năng này nếu mã của bạn là hoàn toàn chủ đề an toàn, hãy để nó ra nếu nó không. Vâng đó là những gì tôi thu thập từ nó.

0

Rõ ràng, điều này giúp trình xử lý trong bộ nhớ và có thể xử lý nhiều yêu cầu. Khi được đặt thành false, nó phải tạo một phiên bản mới của trình xử lý cho mỗi yêu cầu gửi đến.

public bool IsReusable 
{ 
    get 
    { 
     return true; 
    } 
} 
+0

vâng ... tôi biết điều này. tiêu đề câu hỏi là "Truly Usages ..." –

+0

Khó khăn về ngôn ngữ giữa chúng tôi Royi, bạn có thể tái diễn nó bằng cách nào đó vì tôi không chắc chắn ý của bạn là chính xác :) – IrishChieftain

+0

chắc chắn ... :) tôi đã biết ý nghĩa của tài sản . .... nhưng im tìm kiếm một kịch bản thực tế (mẫu) mà tôi phải quyết định nếu đúng hay sai .... –

Các vấn đề liên quan