2009-04-29 13 views
7

Tôi đã phát triển một thử nghiệm trang web trên máy chủ cục bộ Cassini và nó luôn chạy tốt, bây giờ khi tôi triển khai vào máy chủ web của mình, tôi không liên tục nhận được lỗi sau:Ngoại lệ "Không thể xác thực dữ liệu" trong System.Web.Configuration.MachineKeySection.GetDecodedData cho biết

Global.Application_Error Error: Exception occurred during request: http://....blah.aspx Unable to validate data. at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) HttpApplication.RaiseOnError => EventHandler.Invoke => Global.Application_Error

Điều này đang bị bắt trong global.asax của tôi. Tôi đã tìm kiếm xung quanh nhưng không thể tìm ra nguyên nhân. Ngoại lệ này đang được ném trong các biểu mẫu web cực kỳ đơn giản và nhỏ. Trang web không được lưu trữ trong một webfarm.

2 trang dường như gây ra lỗi này không liên tục và một trong số chúng lưu trữ một bool trong ViewState, nhưng nó không bị thay đổi ngoài điều đó.

Có ai đi qua điều này trước đây không?

Trả lời

11

http://dotnetcoderoom.wordpress.com/2008/11/07/unable-to-validate-data-aspnet-error/

Nguyên nhân: Lý do cơ bản của việc này là sự khác biệt của phím trong khi mã hóa và giải mã dữ liệu ViewState. Giả sử một asp.net trả về một trang với key1 và lưu trạng thái trang trong trạng thái xem, trong khi đó khóa asp.net được thay đổi thành key2, bây giờ khi một số sự kiện phía máy chủ sẽ xảy ra trên trang, viewstate sẽ được giải mã và lỗi này sẽ xảy ra trạng thái xem cũ hiện không hợp lệ do một khóa mã hóa khác.

Điều này có thể xảy ra khi bạn mở một trang cho cùng một lúc và sau đó thực hiện một số sự kiện trên đó.

Giải pháp Sửa khóa trong tệp web.config của bạn, để chỉ một khóa được sử dụng để mã hóa và giải mã dữ liệu chế độ xem.

Để biết thêm thông tin xin truy cập:

http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/ASP_DOT_NET/Q_21321364.html

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312906

+0

+1 Câu trả lời hay - đây là cách triển khai công khai mã trên trang kỹ thuật: http://www.developmentnow.com/articles/machinekey_generator.aspx –

+0

Tôi đã thêm một machineKey vào trang web của mình.config, và không có lỗi nào được nêu ra, vì vậy hy vọng đây là giải pháp –

+0

Hãy đánh dấu nó là giải pháp chính xác;) – StevenMcD

3

Hãy thử thêm một chìa khóa máy vào web.config của bạn để xem có khắc phục được lỗi

http://aspnetresources.com/tools/keycreator.aspx

+1

Tôi đã thêm một machineKey vào web.config của mình, và không có lỗi nào được nêu ra, vì vậy hy vọng đây là giải pháp –

8

tôi đã nhận được "không thể xác thực dữ liệu System.Web.Configuration.MachineKeySection.Enc ryptOrDecryptData "trong ứng dụng web asp.net của tôi. Tôi đã xóa cookie của mình và ngoại lệ dừng lại.

+0

Bạn chắc chắn đang làm điều gì đó. Đối với tôi, điều đã xảy ra là tôi đã thay đổi đường dẫn trang web IIS đến một trang web khác sử dụng cùng một giải pháp biểu mẫu ASP.NET và cùng một cookie dựa trên miền NHƯNG một tổ hợp phím máy khác nhau trong web.config. Vì vậy, nó nghĩ rằng cookie đã được cho các trang web mới, nhưng nó đã không được. Nó bị nghẹn khi giải mã dữ liệu được mã hóa bởi trang trước đó. Booya! Cảm ơn vì tiền hỗ trợ. –

0

có cùng lỗi. Các machinekey và decryptionKey là như nhau trong tất cả các web.config nhưng một số web.config đã có

<add key="aspnet:UseLegacyEncryption" value="true" /> 
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" /> 

và khác thì không. Đã xóa khóa này khỏi tất cả web.config. Tôi không nghĩ rằng giải pháp là trong việc loại bỏ chìa khóa nhưng trong cùng một web.config

0

Trong trường hợp của tôi, tôi đã có hai ứng dụng web (một là rất cũ và một khác tôi vừa tạo) và mặc dù có cùng một thiết lập khóa máy được tạo trong một ứng dụng không thể sử dụng được trong một ứng dụng khác. Điều đó đã được sửa bằng cách thêm compatibilityMode="Framework20SP2" làm đối số cho nút machineKey trong web.config trong ứng dụng mới hơn.

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