If you work with web sites in a complex/multi server environment you might be familiar with this error and as the error message itself suggest, the first thing to check if the machineKey value which must be the same across all of the involved server.
Anyway every now and then it happens that you might get this same error even if you are not in a NBL/Cluter environment (Tess and Tom have blogged about this here, here and here) or if you are absolutely sure you have properly configured the machineKey value. So what else can lease you to this state?
If you want some quick background you have a look at my post here; basically we have the following (very raw) steps:
It is important to note that if you dynamically add controls at runtime on your page (i.e. you do not only rely on the page markup to create your layout) it is vital that the controls are added always in the same order or the viewstate validation will fail and you’ll get the error.
We got a dump of the problem; unfortunately in SOS for .NET 2.0 we miss some commands we have in SOS for .NET 1.1, but even if with a bit more typing and digging we can get the same results. The next logical step is to have a look at the exceptions on the managed heap:
0:033> !dumpheap -type Exception -stat ------------------------------ Heap 0 total 2 objects ------------------------------ Heap 1 total 4 objects ------------------------------ Heap 2 total 0 objects ------------------------------ Heap 3 total 7 objects ------------------------------ Heap 4 total 9 objects ------------------------------ Heap 5 total 0 objects ------------------------------ Heap 6 total 0 objects ------------------------------ Heap 7 total 4 objects ------------------------------ total 26 objects Statistics: MT Count TotalSize Class Name 79103ca4 2 24 System.Text.DecoderExceptionFallback 79103c58 2 24 System.Text.EncoderExceptionFallback 502254bc 2 40 System.ServiceModel.Diagnostics.ExceptionUtility 790fe17c 1 72 System.ExecutionEngineException 790fe0e0 1 72 System.StackOverflowException 790fe044 1 72 System.OutOfMemoryException 6640ab48 1 104 System.Web.UI.ViewStateException 20f199b4 1 112 Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException 790fe284 2 144 System.Threading.ThreadAbortException 663dc0d4 2 168 System.Web.HttpException 79118794 11 352 System.UnhandledExceptionEventHandler
We have a ViewStateException so for sure it worth digging into it using the MetodTable:
0:033> !dumpheap -mt 6640ab48 ------------------------------ Heap 0 Address MT Size total 0 objects ------------------------------ Heap 1 Address MT Size 042c74dc 6640ab48 104 total 1 objects ------------------------------ Heap 2 Address MT Size total 0 objects ------------------------------ Heap 3 Address MT Size total 0 objects ------------------------------ Heap 4 Address MT Size total 0 objects ------------------------------ Heap 5 Address MT Size total 0 objects ------------------------------ Heap 6 Address MT Size total 0 objects ------------------------------ Heap 7 Address MT Size total 0 objects ------------------------------ total 1 objects Statistics: MT Count TotalSize Class Name 6640ab48 1 104 System.Web.UI.ViewStateException Total 1 objects 0:033> !do 042c74dc Name: System.Web.UI.ViewStateException MethodTable: 6640ab48 EEClass: 6640aad0 Size: 104(0x68) bytes (C:\WINDOWS\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll) Fields: MT Field Offset Type VT Attr Value Name 790fd8c4 40000b5 4 System.String 0 instance 042cbd04 _className 7910ebc8 40000b6 8 ...ection.MethodBase 0 instance 00000000 _exceptionMethod 790fd8c4 40000b7 c System.String 0 instance 00000000 _exceptionMethodString 790fd8c4 40000b8 10 System.String 0 instance 00000000 _message 79116114 40000b9 14 ...tions.IDictionary 0 instance 00000000 _data 790fdf04 40000ba 18 System.Exception 0 instance 042c73c8 _innerException 790fd8c4 40000bb 1c System.String 0 instance 00000000 _helpURL 790fd0f0 40000bc 20 System.Object 0 instance 00000000 _stackTrace 790fd8c4 40000bd 24 System.String 0 instance 00000000 _stackTraceString 790fd8c4 40000be 28 System.String 0 instance 00000000 _remoteStackTraceString 79102290 40000bf 34 System.Int32 1 instance 0 _remoteStackIndex 790fd0f0 40000c0 2c System.Object 0 instance 00000000 _dynamicMethods 79102290 40000c1 38 System.Int32 1 instance -2146233088 _HResult 790fd8c4 40000c2 30 System.String 0 instance 00000000 _source 791016bc 40000c3 3c System.IntPtr 1 instance 0 _xptrs 79102290 40000c4 40 System.Int32 1 instance -532459699 _xcode 7910be50 4002542 60 System.Boolean 1 instance 1 _isConnected 790fd8c4 4002543 44 System.String 0 instance 042ca6b4 _remoteAddr 790fd8c4 4002544 48 System.String 0 instance 042ca8cc _remotePort 790fd8c4 4002545 4c System.String 0 instance 042bd764 _userAgent 790fd8c4 4002546 50 System.String 0 instance 042c16ec _persistedState 790fd8c4 4002547 54 System.String 0 instance 042bd62c _referer 790fd8c4 4002548 58 System.String 0 instance 042bbe48 _path 790fd8c4 4002549 5c System.String 0 instance 042cb178 _message 7910be50 400254a 61 System.Boolean 1 instance 1 _macValidationError
The _message field is as follows:
0:033> !do 042cb178 Name: System.String MethodTable: 790fd8c4 EEClass: 790fd824 Size: 2104(0x838) bytes (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) String: Invalid viewstate. Client IP: <ip_address> Port: 1449 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30) ViewState: /wEPDwUJNDY5NzIzNzI1D2QWAgIDD2QWAgIBDxQrAAQPFg4eDkFzeW5jUmVuZGVyaW5nZx4UU2hvd1Byb21wdEFyZWFCdXR0b25nHgtab29tUGVyY2VudAJkHghab29tTW9kZQsphgFNaWNyb3NvZnQuUmVwb3J0aW5nLldlYkZvcm1zLlpvb21Nb2RlLCBSZXBvcnRpbmdTZXJ2aWNlc1dlYlNlcnZlciwgVmVyc2lvbj05LjAuMjQyLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49ODk4NDVkY2Q4MDgwY2M5MQIeFERvY3VtZW50TWFwQ29sbGFwc2VkaB4OUmVuZGVyaW5nU3RhdGULKZIBTWljcm9zb2Z0LlJlcG9ydGluZy5XZWJGb3Jtcy5SZXBvcnRSZW5kZXJpbmdTdGF0ZSwgUmVwb3J0aW5nU2VydmljZXNXZWJTZXJ2ZXIsIFZlcnNpb249OS4wLjI0Mi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTg5ODQ1ZGNkODA4MGNjOTECHhBWMVN0eWxlU2hlZXROYW1lZGQoKVhTeXN0ZW0uR3VpZCwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5JGI2MzVjZjFkLTg4MGYtNDEyMC05Y2RjLTk2ZTE0ZGViYzRiMQIBFCsAARQrAAICARQrAAIFGGx3Y2d4MGIzZGI1MzB4NTVsY2F2eXA1NQIBFgpmDw8WAh4LSG... Fields: MT Field Offset Type VT Attr Value Name 79102290 4000096 4 System.Int32 1 instance 1044 m_arrayLength 79102290 4000097 8 System.Int32 1 instance 1043 m_stringLength 790ff328 4000098 c System.Char 1 instance 49 m_firstChar 790fd8c4 4000099 10 System.String 0 shared static Empty >> Domain:Value 000d49f0:790d884c 00101438:790d884c 1f7865b8:790d884c << 7912dd40 400009a 14 System.Char[] 0 shared static WhitespaceChars >> Domain:Value 000d49f0:0a2203f4 00101438:0a2244e8 1f7865b8:0226db3c <<
The ViewState in this error message is truncated, but we can get the entire string from _persistedState:
0:033> !do 042c16ec Name: System.String MethodTable: 790fd8c4 EEClass: 790fd824 Size: 10162(0x27b2) bytes (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) String: /wEPDwUJNDY5NzIzNzI1D2QWAgIDD2QWAgIBDxQrAAQPFg4eDkFzeW5jUmVuZGVyaW5nZx4UU2hvd1Byb21wdEFyZWFCdXR0b25nHgtab29tUGVyY2VudAJkHghab29tTW9kZQsphgFNaWNyb3NvZnQuUmVwb3J0aW5nLldlYkZvcm1zLlpvb21Nb2RlLCBSZXBvcnRpbmdTZXJ2aWNlc1dlYlNlcnZlciwgVmVyc2lvbj05LjAuMjQyLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49ODk4NDVkY2Q4MDgwY2M5MQIeFERvY3VtZW50TWFwQ29sbGFwc2VkaB4OUmVuZGVyaW5nU3RhdGULKZIBTWljcm9zb2Z0LlJlcG9ydGluZy5XZWJGb3Jtcy5SZXBvcnRSZW5kZXJpbmdTdGF0ZSwgUmVwb3J0aW5nU2VydmljZXNXZWJTZXJ2ZXIsIFZlcnNpb249OS4wLjI0Mi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTg5ODQ1ZGNkODA4MGNjOTECHhBWMVN0eWxlU2hlZXROYW1lZGQoKVhTeXN0ZW0uR3VpZCwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5JGI2MzVjZjFkLTg4MGYtNDEyMC05Y2RjLTk2ZTE0ZGViYzRiMQIBFCsAARQrAAICARQrAAIFGGx3Y2d4MGIzZGI1MzB4NTVsY2F2eXA1NQIBFgpmDw8WAh4LSGFzQ29udHJvbHNnZBYEZg8PFgIeDU9uQ2xpZW50Q2xpY2sF/wFyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JlcG9ydFZpZXdlckNvbnRyb2xfY3RsMDAnKS5QYXJhbWV0ZXJzQ29udHJvbGxlci5WYWxpZGF0ZUhhc1ZhbHVlKCdSZXBvcnRWaWV3ZXJDb250cm9sX2N0bDAwX2N0bDAzX3R4dFZhbHVlJywgJycsICdQbGVhc2UgZW50ZXIgYSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBcJ86az4nOtM65zrrPjM+CIM6Rzq/PhM63z4POt8+CXCcuICBUaGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBibGFuay4nKTtkZAIDD2QWAgIBDw8WAh4EVGV4dAUPNjQ4MTAxMTA4MDI0MTY1ZGQCAQ9kFg5mD2QWAmYPD2QWAh4Hb25jbGljawWoAWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXBvcnRWaWV3ZXJDb250cm9sJykuQ2xpZW50Q29udHJvbGxlci5TZXREb2NNYXBWaXNpYmlsaXR5KCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVwb3J0Vmlld2VyQ29udHJvbCcpLkNsaWVudENvbnRyb2xsZXIuSXNEb2NNYXBWaXNpYmxlKCkpOxYCZg8PFgYeBVdpZHRoGwAAAAAAADBAAQAAAB4GSGVpZ2h0GwAAAAAAADBAAQAAAB4EXyFTQgKAAxYCHgVzdHlsZQUMcGFkZGluZzoycHg7ZAIBD2QWCmYPZBYCAgEPZBYCZg8PFgYfCxsAAAAAAAAwQAEAAAAfDBsAAAAAAAAwQAEAAAAfDQKAAxYCHw4FDHBhZGRpbmc6MnB4O2QCAQ9kFgICAQ9kFgJmDw8WBh8LGwAAAAAAADBAAQAAAB8MGwAAAAAAADBAAQAAAB8NAoADFgIfDgUMcGFkZGluZzoycHg7ZAICDw8WBB8JZR4HRW5hYmxlZGgWAh4Kb25rZXlwcmVzcwWNA2lmIChldmVudC5rZXlDb2RlID09IDEwIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpIHsNCnZhciBwYWdlTnVtYmVyID0gcGFyc2VJbnQodGhpcy52YWx1ZSwgMTApOw0KaWYgKGlzTmFOKHBhZ2VOdW1iZXIpIHx8IHBhZ2VOdW1iZXIgPCAxIHx8IHBhZ2VOdW1iZXIgPiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVwb3J0Vmlld2VyQ29udHJvbCcpLkNsaWVudENvbnRyb2xsZXIuVG90YWxQYWdlcykNCiAgICBhbGVydCgnRW50ZXIgYSB2YWxpZCBwYWdlIG51bWJlcicpOw0KZWxzZQ0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXBvcnRWaWV3ZXJDb250cm9sJykuQ2xpZW50Q29udHJvbGxlci5BY3Rpb25IYW5kbGVyKCdQYWdlTmF2JywgcGFnZU51bWJlcik7OzsgcmV0dXJuIGZhbHNlO31kAgUPZBYCAgEPZBYCZg8PFgYfCxsAAAAAAAAwQAEAAAAfDBsAAAAAAAAwQAEAAAAfDQKAAxYCHw4FDHBhZGRpbmc6MnB4O2QCBg9kFgICAQ9kFgJmDw8WBh8LGwAAAAAAADBAAQAAAB8MGwAAAAAAADBAAQAAAB8NAoADFgIfDgUMcGFkZGluZzoycHg7ZAICD2QWAmYPZBYCAgEPZBYCZg8PFgYfCxsAAAAAAAAwQAEAAAAfDBsAAAAAAAAwQAEAAAAfDQKAAxYCHw4FDHBhZGRpbmc6MnB4O2QCAw9kFgJmDxAPZBYEHghvbmNoYW5nZQVgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JlcG9ydFZpZXdlckNvbnRyb2wnKS5DbGllbnRDb250cm9sbGVyLlNldFpvb20oZXZlbnQuc3JjRWxlbWVudC52YWx1ZSk7HghkaXNhYmxlZAUIZGlzYWJsZWRkFgECBWQCBA9kFgJmDw8WAh8PaBYEHhBvbnByb3BlcnR5Y2hhbmdlBaMCaWYgKGV2ZW50LnByb3BlcnR5TmFtZSA9PSAndmFsdWUnKQ0Kew0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXBvcnRWaWV3ZXJDb250cm9sX2N0bDAxX2N0bDA0X2N0bDAxJykuQ29udHJvbGxlci5TZXRWaWV3ZXJMaW5rQWN0aXZlKHRoaXMudmFsdWUgIT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9ICcnKTsNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVwb3J0Vmlld2VyQ29udHJvbF9jdGwwMV9jdGwwNF9jdGwwMycpLkNvbnRyb2xsZXIuU2V0Vmlld2VyTGlua0FjdGl2ZShmYWxzZSk7DQp9HxAF4QFpZiAoZXZlbnQua2V5Q29kZSA9PSAxMCB8fCBldmVudC5rZXlDb2RlID09IDEzKSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JlcG9ydFZpZXdlckNvbnRyb2wnKS5DbGllbnRDb250cm9sbGVyLkFjdGlvbkhhbmRsZXIoJ1NlYXJjaCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXBvcnRWaWV3ZXJDb250cm9sX2N0bDAxX2N0bDA0X2N0bDAwJykudmFsdWUpOzsgcmV0dXJuIGZhbHNlO31kAgcPZBYCZg9kFgICAQ9kFgJmDw8WBh8LGwAAAAAAADBAAQAAAB8MGwAAAAAAADBAAQAAAB8NAoADFgIfDgUMcGFkZGluZzoycHg7ZAIID2QWAmYPZBYCAgEPZBYCZg8PFgYfCxsAAAAAAAAwQAEAAAAfDBsAAAAAAAAwQAEAAAAfDQKAAxYCHw4FDHBhZGRpbmc6MnB4O2QCBg8WAh4FVmFsdWUFATFkAgcPFgIfFAUFZmFsc2VkAggPFgIfFAUFZmFsc2VkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYQBStSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAwJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDAwJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDAwJGN0bDAxJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDAxJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDAxJGN0bDAxJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDA1JGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDA1JGN0bDAxJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDA2JGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAxJGN0bDA2JGN0bDAxJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAyJGN0bDAwJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDAyJGN0bDAwJGN0bDAxJGN0bDAwBStSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDA2JGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDA3JGN0bDAwJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDA3JGN0bDAwJGN0bDAxJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDA4JGN0bDAwJGN0bDAwJGN0bDAwBTFSZXBvcnRWaWV3ZXJDb250cm9sJGN0bDAxJGN0bDA4JGN0bDAwJGN0bDAxJGN0bDAwX2RaxoBglgh8qbVp7F4IKaK6C+A= Fields: MT Field Offset Type VT Attr Value Name 79102290 4000096 4 System.Int32 1 instance 5073 m_arrayLength 79102290 4000097 8 System.Int32 1 instance 5072 m_stringLength 790ff328 4000098 c System.Char 1 instance 2f m_firstChar 790fd8c4 4000099 10 System.String 0 shared static Empty >> Domain:Value 000d49f0:790d884c 00101438:790d884c 1f7865b8:790d884c << 7912dd40 400009a 14 System.Char[] 0 shared static WhitespaceChars >> Domain:Value 000d49f0:0a2203f4 00101438:0a2244e8 1f7865b8:0226db3c <<
There is also an _innerException we can look at:
0:033> !do 042c73c8 Name: System.Web.HttpException MethodTable: 663dc0d4 EEClass: 663dc05c Size: 84(0x54) bytes (C:\WINDOWS\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll) Fields: MT Field Offset Type VT Attr Value Name 790fd8c4 40000b5 4 System.String 0 instance 042cbd58 _className 7910ebc8 40000b6 8 ...ection.MethodBase 0 instance 00000000 _exceptionMethod 790fd8c4 40000b7 c System.String 0 instance 00000000 _exceptionMethodString 790fd8c4 40000b8 10 System.String 0 instance 042c745c _message 79116114 40000b9 14 ...tions.IDictionary 0 instance 00000000 _data 790fdf04 40000ba 18 System.Exception 0 instance 00000000 _innerException 790fd8c4 40000bb 1c System.String 0 instance 00000000 _helpURL 790fd0f0 40000bc 20 System.Object 0 instance 042c74a0 _stackTrace 790fd8c4 40000bd 24 System.String 0 instance 00000000 _stackTraceString 790fd8c4 40000be 28 System.String 0 instance 00000000 _remoteStackTraceString 79102290 40000bf 34 System.Int32 1 instance 0 _remoteStackIndex 790fd0f0 40000c0 2c System.Object 0 instance 00000000 _dynamicMethods 79102290 40000c1 38 System.Int32 1 instance -2147467259 _HResult 790fd8c4 40000c2 30 System.String 0 instance 00000000 _source 791016bc 40000c3 3c System.IntPtr 1 instance 0 _xptrs 79102290 40000c4 40 System.Int32 1 instance -532459699 _xcode 79102290 4001029 48 System.Int32 1 instance 0 _httpCode 663e49c4 400102a 44 ...eb.ErrorFormatter 0 instance 00000000 _errorFormatter 79102290 400102b 4c System.Int32 1 instance 0 _webEventCode 0:033> !do 042c745c Name: System.String MethodTable: 790fd8c4 EEClass: 790fd824 Size: 66(0x42) bytes (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) String: Unable to validate data. Fields: MT Field Offset Type VT Attr Value Name 79102290 4000096 4 System.Int32 1 instance 25 m_arrayLength 79102290 4000097 8 System.Int32 1 instance 24 m_stringLength 790ff328 4000098 c System.Char 1 instance 55 m_firstChar 790fd8c4 4000099 10 System.String 0 shared static Empty >> Domain:Value 000d49f0:790d884c 00101438:790d884c 1f7865b8:790d884c << 7912dd40 400009a 14 System.Char[] 0 shared static WhitespaceChars >> Domain:Value 000d49f0:0a2203f4 00101438:0a2244e8 1f7865b8:0226db3c <<
So we know in this case we are unable to validate the ViewState; we can also paste the ViewState string from _persistedState in ViewState Decoder
The “Character Count” value is just a bit more than 5.000, not much for the complex pages we were looking at… Depending on their configuration, firewall and/or proxies software can truncate fields and values exceeding a certain amount of bytes, and this is another known cause for InvalidViewstateExceptions. Who can we quickly check?
A network trace can help, but as an empiric test we can use LogParser on IIS logs. These are the maximum, average and minimum amount of bytes send from the server as a result of a GET to an aspx page:
logparser "select max(sc-bytes), avg(sc-bytes), min(sc-bytes) from *.log where to_lowercase(extract_extension(cs-uri-stem))='aspx' and to_lowercase(cs-method)='get'" -i:iisw3c MAX(ALL sc-bytes) AVG(ALL sc-bytes) MIN(ALL sc-bytes) ----------------- ----------------- ----------------- 72756 44009 448
And these are the same values, calculated on the bytes posted from the clients:
logparser "select max(cs-bytes), avg(cs-bytes), min(cs-bytes) from *.log where to_lowercase(extract_extension(cs-uri-stem))='aspx' and to_lowercase(cs-method)='post'" -i:iisw3c MAX(ALL cs-bytes) AVG(ALL cs-bytes) MIN(ALL cs-bytes) ----------------- ----------------- ----------------- 11662 4620 819
A quick check on customer’s network revealed they actually had configured (I think for security reasons) a maximum allowed size for HTML incoming fields and due to some policies and constraints they had, we could not increase that value. Ok, now what?
Luckily, we can configure the MaxPageStateFieldLength property exactly for this purpose:
When the MaxPageStateFieldLength property is set to a positive number, the view state sent to the client browser is broken into multiple hidden fields, and each field's value is less than the size specified in the MaxPageStateFieldLength property. Setting the MaxPageStateFieldLength property to a negative number (the default) indicates that the view-state field should not be separated into chunks. Setting the MaxPageStateFieldLength to a small number may result in poor performance. Set the value of the MaxPageStateFieldLength property in the pages element of the Web.config file.
When the MaxPageStateFieldLength property is set to a positive number, the view state sent to the client browser is broken into multiple hidden fields, and each field's value is less than the size specified in the MaxPageStateFieldLength property.
Setting the MaxPageStateFieldLength property to a negative number (the default) indicates that the view-state field should not be separated into chunks. Setting the MaxPageStateFieldLength to a small number may result in poor performance.
Set the value of the MaxPageStateFieldLength property in the pages element of the Web.config file.
We set the values to something less than 5 Kb and the problem magically disappeared
Carlo
"A quick check on customer’s network revealed they actually had configured (I think for security reasons) a maximum allowed size for HTML incoming fields"
and how did you determine that?
Actually, I asked the customer if they had such a configuration and he found it... :-)
I do not know which kind of firewall they were using, it was not important for the sake of our discussion, what was important was the effect of that setting on the application. This is not the first time I find troubles with this kind of configuration, but I guess every firewall controls it in its own way...
I cannot be more specific at the moment, sorry...