2011-01-13 6 views
8

Có cách nào trong ASP.net để tìm nạp dữ liệu từ máy chủ mà không kéo dài thời gian chờ của phiên không? Điều này cần phải được thực hiện cứ sau vài phút mà không có sự tương tác của người dùng cho đến khi trang được đóng lại.Lấy dữ liệu từ máy chủ mà không kéo dài thời gian chờ phiên

bối cảnh bổ sung, theo yêu cầu:

Các trang trong webapp của tôi cần phải thăm dò ý kiến ​​các máy chủ mỗi vài phút để kiểm tra một điều kiện cụ thể (bảo trì khẩn cấp lên kế hoạch cho 30 phút thời gian, trong trường hợp này). Khi điều kiện là đúng, trang sẽ hiển thị một thông báo cho người dùng. Khi điều kiện là sai, không có gì cần phải xảy ra.

Như tôi đã hiểu, đăng lại máy chủ sẽ đặt lại thời gian cho đến khi phiên hết hạn. Chúng tôi không muốn phiên được mở rộng/làm mới/đặt lại/bất kỳ từ nào là mỗi khi trang thăm dò ý kiến ​​máy chủ. Tôi cần một cách để thăm dò ý kiến ​​máy chủ tự động mà không cần đặt lại thời gian chờ của phiên.

Cảm ơn.

+0

Có lẽ chúng ta cần thêm một chút thông tin? Bạn chỉ có thể kéo dài thời gian chờ của phiên. – Remy

+1

Cuộc gọi AJAX với dịch vụ web không được kéo dài phiên của người dùng. – Refugee

+1

@Refugee: Không nên hay không?Cảm thấy tự do để gửi bình luận của bạn như là một câu trả lời, vì nó có vẻ như nó cũng có thể là câu trả lời tôi đang tìm kiếm! –

Trả lời

3

Nếu bạn đang yêu cầu trong bối cảnh yêu cầu HTTP dài, do đó bạn đang tìm cách ngăn thời gian chờ HTTP, hãy xem <httpRuntime executionTimeout="99999"></httpRuntime> của web.config trong đó executionTimeout là giây tôi nghĩ, http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.71).aspx.

Nếu nó thực sự chỉ là một vấn đề thời gian chờ phiên, có thể ping không đồng bộ máy chủ trong cùng một phiên người dùng, trong khi quá trình dài đang chạy không?

Sửa: Dựa trên chỉnh sửa của bạn, nếu bạn phân vùng "bảo trì trang web" dịch vụ web của bạn thành một dịch vụ ngoài phạm vi nhà nước phiên họp của phần bình thường của trang web, sau đó bạn có thể gọi nó thường xuyên như bạn muốn. Nếu bạn đang sử dụng dịch vụ web ASMX trong trang web hiện tại của mình tại thời điểm này, ví dụ, chỉ cần phân vùng nó thành một ứng dụng riêng biệt, có thể là thư mục tắt của ứng dụng của bạn, để nó nằm trong cùng một tên miền. Tôi tưởng tượng rằng nó sẽ hoạt động tốt.

Tôi không chắc chắn loại dịch vụ web bạn đang gọi vào lúc này (ASMX, WCF, v.v.), hoặc thậm chí nếu dịch vụ web mà bạn đang gọi vào thời điểm này nằm trong cùng ứng dụng với Trang ứng dụng ASPX.

+0

Bản chỉnh sửa của bạn chứa giải pháp mà tôi cần. –

1

Trước tiên, nếu truy vấn vượt quá giới hạn thời gian phiên thì có vấn đề nghiêm trọng với truy vấn. Tôi muốn sửa chữa truy vấn đầu tiên. Tuy nhiên, nếu bạn vẫn muốn làm điều đó bằng phiên, thử điều này:

Bạn có thể có một Dummy.aspx trong ứng dụng của bạn và sau đó có một yếu tố ảnh refresh URL của nó mỗi 15 phút như:

<img id="dummyImage" src="/Dummy.aspx" width=0 height=0/> 

<script type="text/javascript"> 
    var dummyImage = document.getElementById("dummyImage"); 
    setInterval(function(){ 
     dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000); 
    }, 900000); 
</script> 

Bằng cách này bạn sẽ không ảnh hưởng đến thời gian chờ của phiên ở cấp độ toàn cầu.

+2

Bằng cách thực hiện dummyImage.src = "Dummy.aspx? .....", trình duyệt sẽ đưa ra yêu cầu GET tới url đó, cũng bao gồm cookie sessionId và do đó đặt lại thời gian chờ của phiên. –

-2

Sử dụng bộ hẹn giờ javascript kích hoạt cuộc gọi AJAX. Vì vậy, trong sự kiện PageLoad của bạn, hãy bật chức năng javascript setInterval(functiontocall(), timetowait);. Phương thức bạn gọi sẽ là cú đánh AJAX vào một dịch vụ web có truy vấn của bạn.

Điều này sẽ tiếp tục tự gọi cho đến khi người dùng đóng trang.

Phiên không được làm mới từ lần truy cập AJAX.

+3

Số lượt truy cập AJAX trên cùng một ứng dụng web làm làm mới phiên, thật không may. Cảm ơn sự giúp đỡ của bạn. –

+1

Yêu cầu AJAX giống như yêu cầu thông thường, ngoại trừ các yêu cầu không đồng bộ. Điều đó có nghĩa là họ cũng sẽ bao gồm cookie phiên id, buộc yêu cầu vào phiên và do đó đặt lại thời gian chờ. –