8

Tôi gặp sự cố rất kỳ lạ với phiên trên ASP.NET 2.0. Hệ thống tôi đang làm việc trên sử dụng các biến phiên để lưu trữ các tham số trên các đối tượng (như câu hỏi và câu trả lời) để tạo báo cáo. Đây là các trường hợp của các lớp có cùng tên và do đó chúng được điền thông số như sau:Phiên ASP.NET kết thúc bất ngờ

Báo cáo này được tạo thông qua 4 trang aspx. Đầu tiên xác định thông số vị trí và ngày, trang thứ hai lưu trữ câu hỏi và câu trả lời của cửa hàng thứ ba. Màn hình cuối cùng liên kết đến các báo cáo được tạo trên các định dạng Excel và HTML. Tất cả dữ liệu biến được lưu trữ trên phiên, và mọi thứ diễn ra tốt đẹp, cho đến trang cuối cùng, khi một thứ như Session.Abandon() xảy ra, sự kiện Session_End được kích hoạt và tất cả các biến bị mất. Điều này xảy ra chỉ một lần một ngày, đối với mỗi người dùng đã đăng nhập vào lần sử dụng đầu tiên của báo cáo, và sau đó bạn có thể thử cả ngày và không nhìn thấy nó lần nữa.

Sự cố xảy ra trên cùng một trang LUÔN, và chế độ phiên là InProc.

tôi đã thực hiện kiểm chứng thực sau đây:

  1. Kiểm tra nếu có bất kỳ Session.Abandon() hoặc Session.Clear() lệnh. Không có gì cả.
  2. Thời gian chờ của phiên được kiểm tra, được đặt thành 18 phút và sự cố xảy ra bất cứ lúc nào như đã nêu ở trên, bất kể bạn đã sử dụng hết thời gian trong 18 phút.
  3. Thời gian chờ của biểu mẫu được kiểm tra, trong Xác thực. Nó cũng được thiết lập đến 18 phút.
  4. Tôi đã học được rằng có lỗi với Server.Transfer() đôi khi có thể xóa phiên và viewstate, và đã thay thế bằng Response.Redirec()
  5. Đã theo dõi phiên phiên theo dòng mã và mọi thứ diễn ra tốt đẹp, và khi trang được tải hoàn toàn, nó chỉ đơn giản là chết. Tất cả các biến đã biến mất, nhưng phiên vẫn hoạt động.
  6. Theo như tôi quan tâm, IIS được cấu hình đúng. Tôi không có quyền truy cập vào nó, nhưng tất cả các hệ thống khác hoạt động hoàn hảo.
  7. Cũng đã phân tích một số hệ thống nói trên tìm kiếm một số đầu mối về những gì có thể xảy ra, nhưng tệp web.config của chúng rất giống với tệp tôi gặp sự cố và không có mã đặc biệt nào được triển khai để tương tác với phiên khác nhau.
  8. Cũng nghĩ về giám sát IIS để khởi động lại ứng dụng, nhưng tôi chắc chắn nó không vượt quá giới hạn mặc định là 15. Tuy nhiên, tôi không có quyền truy cập vào máy chủ IIS và tất cả các thử nghiệm được thực hiện trên máy tính của tôi đang sử dụng ASP. Máy chủ phát triển NET. Vấn đề xảy ra trên cả hai.
  9. Đã kiểm tra khả năng tái chế quy trình, chẳng hạn như thay đổi tệp .config và asax, thay đổi thành/trên thư mục bin, không có sự cố nào xảy ra.

hạn chế sau được áp dụng:

  1. Không thể thay đổi chế độ phiên để khác hơn InProc do các chính sách công ty.
  2. Quá trình tạo "báo cáo" được tạo thông qua 4 trang. Tôi không đồng ý với điều này, nhưng không thể làm lại nó do hạn chế về thời gian và ngân sách.

Bất kỳ suy nghĩ hoặc giải pháp nào đều hữu ích. Tôi sẽ giữ liên lạc cho bất kỳ bản cập nhật và kiểm tra nào cần thiết.

+0

Bạn có quyền truy cập vào cơ chế lược tả không? Chúng tôi đã gặp phải vấn đề về xả phiên khi lượng bộ nhớ dành riêng cho w3wp vượt quá số lượng được chỉ định trong machine.config. ASP.NET quầy hiệu suất đã giúp chúng tôi rất nhiều trong gỡ lỗi này. –

+0

Chúng tôi không sử dụng tệp machine.config. Theo những gì tôi biết, tệp này là trang web rộng và sẽ ảnh hưởng đến các ứng dụng khác trong cùng một trang web trên IIS. Cơ sở hạ tầng máy chủ trên công ty áp dụng tất cả các hệ thống trong cùng một trang web, như các thư mục ảo. –

+0

Bạn có thể đăng mã để hiển thị vào thời điểm session_end được kích hoạt không? Và bạn sử dụng những gì để tạo báo cáo? kiểm tra xem bạn có vô tình âm thầm xử lý bất kỳ ngoại lệ nào không (ví dụ trong application_error). (nếu các công cụ báo cáo là bên thứ 3 chạy trang mà không có nó để xem nếu nó vẫn xảy ra). – Jeroen

Trả lời

2

Tôi muốn cảm ơn tất cả mọi người vì nỗ lực này!

Tôi và nhóm của tôi đã khám phá những gì đang xảy ra trong trường hợp này. Có một phương pháp xóa các tệp và thư mục tạm thời trong thư mục Trang web, gây ra sự tái chế và phiên làm việc. Mã đã được tính toán ngày tháng và thời gian, và được cho là để xóa các thư mục mỗi 24h, vì vậy khi một người dùng lần đầu tiên đăng nhập vào hệ thống và tạo ra các báo cáo, nó đã xóa các dir và flushed phiên.

1

Một vài gợi ý:

  1. gỡ lỗi các hit đầu tiên tại địa phương và xem nếu có bất cứ điều gì độc đáo trong con đường.
  2. Hãy chắc chắn rằng các hit đầu tiên là không gây ra một vấn đề với quá trình lao động
  3. Hãy chắc chắn rằng bạn không sử dụng giá trị phiên trước một postback

Những gì tôi nghĩ đang xảy ra là # 3. Bạn đang thiết lập các giá trị trong một phiên và sau đó tiêu thụ chúng trở lại trong phiên đó trước khi đăng lại, nơi giá trị phiên thực sự được lưu trữ. Vì nó chỉ xảy ra trong lần thử đầu tiên, các triệu chứng phản ánh sự nghi ngờ này. Nếu tôi đúng, bạn giải quyết điều này bằng cách tiêu thụ từ cùng một vị trí bạn đã sử dụng giá trị phiên thay vì đặt phiên và sau đó cố gắng kéo từ nó trong cùng một yêu cầu.

+0

Đối với # 1, tôi đã thực hiện điều đó nhưng không thấy bất cứ điều gì "duy nhất". Vào ngày 2, tôi không thực sự chắc chắn làm thế nào để xem các vấn đề về quá trình này. Đối với # 3, bạn có nghĩa là tôi có thể tiêu thụ các giá trị trước khi chúng thực sự được thiết lập không? Đó không phải là trường hợp, bởi vì tôi đã theo dõi lần chạy đầu tiên, và các biến, giá trị và đối tượng tương ứng của chúng được đặt trên trang aspx đầu tiên, thứ hai và thứ ba chỉ điền các đối tượng có tham số được người dùng nhập vào biểu mẫu, như hộp kiểm, radio và như nhau, ra, và cuối cùng, được nạp với tất cả các biến còn nguyên vẹn. –

+0

Các biến được sử dụng khi tệp excel và html được tạo trong sự kiện Page_Load. Khi sự kiện này được thực hiện, Session_End đột nhiên bị sa thải và các biến bị xóa. Bạn có nghĩ rằng điều này đang được gây ra bởi vì các biến được sử dụng trên Page_Load?Không kiểm tra được thực hiện hoặc là một postback hay không, vì trang này chỉ được nạp để tạo báo cáo và tạo liên kết, không có gì khác. Đây là một phương pháp rất kỳ lạ, tôi cho rằng nó sẽ được tạo ra trên một Button_Click, nhưng không phải là tôi đã định nghĩa cái này. –

0

tôi gặp sự cố với phiên. trong trường hợp của tôi, vấn đề là số lượng chuỗi công nhân tối đa của hồ bơi ứng dụng. nếu bạn sẽ sử dụng phiên mặc định của asp.net, bạn phải làm cho nó 1. hoặc một chủ đề khác không thể nhận được các phiên.

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