2011-01-14 34 views

Trả lời

10

Mất một lúc để tìm câu trả lời cho điều này vì tôi đã được thông báo rằng một máy chủ IIS7 khác mà tôi đã so sánh nó đã được thiết lập theo cùng một cách, bởi cùng một người.

Hóa ra máy chủ có trang web nhận được lỗi này đã được thiết lập bằng Plesk, trong khi máy chủ khác chưa được.

Có vẻ như Plesk đặt Idle-Timeout thành 5 phút trên các hồ bơi ứng dụng, đó là nguyên nhân gây ra lỗi này.

Để thay đổi điều này làm như sau:

  1. Mở IIS
  2. Bấm vào nút application pool
  3. Xác định vị trí hồ bơi ứng dụng ứng dụng web của bạn
  4. Right-Click và chọn Advanace Cài đặt
  5. Set tài sản hết thời gian chờ (phút) thành 0 hoặc tăng lên 30 phút
+1

Rất vui khi bạn làm việc đó, tôi chưa bao giờ nghĩ về thời gian chờ nhàn rỗi và cho rằng đó sẽ là một giá trị hợp lý. Dù sao tôi có được một upvote cho nỗ lực? :) – Kev

+0

Haha chắc chắn, cảm ơn sự giúp đỡ của bạn! – Curt

+0

Hmmm bạn có thể thử chỉnh sửa câu trả lời của mình không? Nó tuyên bố khóa của nó cho đến khi nó được chỉnh sửa, sau đó tôi có thể bỏ phiếu: S – Curt

11

Có một vài lý do này có thể xảy ra:

Auto-Generated Máy Keys:

Nếu hồ ứng dụng của bạn có mặc định thời gian chờ nhàn rỗi của 20 phút và bạn đang sử dụng xác nhận tự động tạo ra và các khóa giải mã sau đó mỗi lần nhóm bắt đầu nó sẽ tạo ra một bộ khóa mới. Thao tác này sẽ vô hiệu hóa chế độ xem được mã hóa của trình duyệt. Bạn cũng sẽ thấy rằng các hình thức xác thực vé cho vé liên tục cũng sẽ trở thành không hợp lệ.

Để khắc phục bộ này những chìa khóa để các giá trị cố định trong:

`c:\%systemroot%\microsoft.net\framework\v2.0.50727\CONFIG\machine.config` 

Bạn cần phải thêm các yếu tố <machineKey> cấu hình phần <system.web>. Có một bài viết khá tốt ở đây giải thích làm thế nào để làm điều này:

How To: Configure MachineKey in ASP.NET 2.0

Cuộn xuống phần trên "Web Farm Deployment Considerations" và Tạo được mã hóa phím ngẫu nhiên.

Nếu bạn đang chạy trang web tải cân bằng, bạn cũng cần đặt khóa máy của mỗi máy chủ chính xác với cùng một giá trị.

không đúng giá trị hình thức action (3.5SP1):

Ngoài ra còn có một trường hợp (bài 3.5SP1) mà nếu bạn thiết lập các action thuộc tính của hình thức ASP.NET của bạn để một cái gì đó khác hơn là trang được đăng lại và bạn không sử dụng đăng lại trang sau, bạn sẽ gặp phải lỗi này. Nhưng bạn sẽ thấy điều này ngay lập tức:

Validation of viewstate MAC failed after installing .NET 3.5 SP1

Timing/Dài Chạy Trang:

Ngoài ra còn có một trường hợp cạnh cho các trang mà phải mất một thời gian dài để làm cho nơi mà nếu trang được hiển thị một phần và đăng lại xảy ra:

Validation of viewstate MAC failed error

Nguyên nhân gốc Ngoại lệ này xuất hiện vì Điều khiển bằng cách sử dụng DataKeyNames yêu cầu Viewstate phải được mã hóa. Khi Viewstate được mã hóa (Chế độ mặc định , Tự động, là mã hóa nếu các điều khiển yêu cầu, nếu không không), Trang thêm trường trước khi đóng thẻ .Nhưng trường ẩn này có thể chưa được hiển thị cho trình duyệt có các trang chạy dài và nếu bạn đăng lại trước khi xuất hiện, trình duyệt sẽ bắt đầu postback mà không cần trường này (trong bộ sưu tập biểu mẫu). Kết quả cuối cùng là nếu trường này là bỏ qua khi đăng lại, trang không biết rằng Viewstate được mã hóa và gây ra Ngoại lệ nói trên. I.E. trang dự kiến ​​sẽ được nạp đầy đủ trước khi bạn thực hiện đăng lại.

+0

Xin chào Kev, cảm ơn bạn đã phản ứng sâu sắc. Tuy nhiên, chúng tôi đã chỉ định thủ công các phím máy. Tôi không tin rằng giá trị 'hành động' là một vấn đề đối với chúng tôi, vì chúng tôi không explicity thiết lập này, và chúng tôi đang gặp vấn đề này trong ASP.NET 2.0 cũng. Ngoài ra, vì chúng tôi không hành động biểu mẫu trong hơn 20 phút, tôi không tin rằng trang không có đủ thời gian để tải có liên quan. Chúc mừng. – Curt

+0

Bạn có thể nghĩ ra bất kỳ lý do nào khác có thể giải thích tại sao điều này có thể xảy ra không? Giúp bạn đánh giá cao vì chúng tôi đang đấu tranh để giải quyết vấn đề này! – Curt

+0

@Curt - hmm đó là đầu trầy xước. Bạn có thấy điều gì thú vị trong các bản ghi Sự kiện trong khoảng thời gian xảy ra không? – Kev

0

Xác nhận MAC của Viewstate không thành công. Nếu ứng dụng này được lưu trữ bởi một Web Farm hoặc cluster, hãy đảm bảo rằng cấu hình chỉ định cùng một thuật toán validationKey và validation. Không thể sử dụng AutoGenerate trong cụm Như tôi đã phát hiện, có một thẻ <base .... trong phần tiêu đề của trang cái mà tôi đã thêm vào lần cuối cùng và trước khi xuất bản. Thẻ này chỉ định URL mặc định và mục tiêu mặc định cho tất cả các liên kết trên một trang. Đây là nguyên nhân chính của lỗi, lần này.

2

Tôi gặp sự cố này và kịch bản là một máy chủ web lưu trữ một ứng dụng ASP.Net rất cơ bản. Sau khi đấu tranh rất nhiều, tôi tìm thấy bài đăng này, và điều đó đã giúp tôi hiểu rằng vấn đề là quá trình công nhân được tái chế.

Tôi thấy điều này khá khắc nghiệt, vì đó là kịch bản mà ứng dụng có thể gặp phải và lỗi lõi như vậy ngăn bạn xử lý đúng cách. Theo tôi có thể thấy, điều này có nguồn gốc vì cấu hình mặc định để xử lý các phím này sẽ sử dụng machine.config cho biết các khóa được tạo tự động và được phân tách cho mỗi ứng dụng. Tôi nghĩ trong trường hợp này ASP.Net là khóa tạm thời và lưu trữ nó ở cấp quy trình công nhân, và khi quá trình nhân viên đó biến mất thì vấn đề phát sinh và không thể xử lý được.

Thay thế cấu hình khóa máy giải quyết vấn đề, rõ ràng là tốt hơn để đặt nó trên tệp web.config thay vì toàn bộ machine.config để giữ nó ở mức độ chi tiết thấp nhất.

Một tùy chọn khác là tắt kiểm tra trạng thái xem MAC, cũng thông qua web.config. Nó sẽ phụ thuộc vào mức độ bảo mật của ứng dụng của bạn và nguy cơ có trạng thái xem bị giả mạo.

Và tùy chọn tốt nhất là tránh sử dụng trạng thái xem với ứng dụng MVC.

+2

Tôi tin rằng bạn đã quên liên kết tới '* bài đăng này *' ... – LSerni

+0

Tôi nhiệt tình thứ hai đề xuất lựa chọn tốt nhất của Diego. :-) Tôi ghét ID phần tử HTML được tạo tự động trong trang web ASP.Net. Tôi thấy rằng các datatables JQuery có vấn đề khi ID phần tử HTML nhận được hơn 50 ký tự. Với các biểu mẫu web, tôi không phải là hiếm khi có ID phần tử HTML với hơn 70 ký tự, đặc biệt nếu tôi sử dụng các bộ lặp lồng nhau và các trang kiểm soát ascx. – Bryan