.NET 응용 프로그램의 불규칙한 잘못된 보기 상태 문제
ASP.NET 응용 프로그램의 이벤트 뷰어에서 가끔 "잘못된 보기 상태"가 표시되는 것 같습니다.
대부분(95%)이 참조하고 있는 것으로 보입니다.ScriptResource.axd
(응용 프로그램은 ASP.NET AJAX 라이브러리를 사용합니다.).Ajax는 어디서나 사용되기 때문에 Ajax 라이브러리도 제거할 수 없습니다.
어떻게 하면 이러한 오류를 줄일 수 있습니까?하루에 100~200개의 오류가 발생하는데 어떻게 해결해야 할지 모르겠습니다!이들은 서로 다른 브라우저, 서로 다른 IP 및 지리적 위치가 다릅니다.
나는 그 문제를 재현하기가 어렵습니다. 왜냐하면 나는 그것이 거의 일어나지도 않았는데 갑자기 3-4번밖에 일어나지 않았기 때문입니다.
오류:
Process information:
Process ID: 4004
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information:
Exception type: HttpException
Exception message: Invalid viewstate.
Request information:
Request URL: http://domainnamehere/ScriptResource.axd?d=W1R6x9VzZ2C9SKnIkOmX9VRLhSjJ3nOF1GSQvPwKS3html
Request path: /ScriptResource.axd
User host address: 124.177.170.75
User:
Is authenticated: False
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information:
Thread ID: 1
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType)
at System.Web.UI.Page.DecryptString(String s)
at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString)
at System.Web.Handlers.ScriptResourceHandler.ProcessRequestInternal(HttpResponse response, NameValueCollection queryString, VirtualFileReader fileReader)
at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context)
at System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Custom event details:
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
또한 .NET 코드에서 관련이 있을 수 있는 동시에 발생하는 다음과 같은 오류가 가끔 발생합니다.
Exception raised in GLOBAL.ASAX.Application_Error(): 'Padding is invalid and cannot be removed.' at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
이것은 많은 사람들이 겪어온 IE8 문제와 동일한 것으로 보입니다.어떻게든 IE8(IE8 렌더링 모드와 IE7 호환성 모드 모두)은 HTML 문서의 중간에서 4096바이트를 잃게 되고 이 누락된 데이터는 이 예외를 발생시킵니다(보통 ScriptResource 또는 WebResource 호출에서 볼 수 있음).
다음은 이 문제에 대한 Microsoft 버그 보고서입니다. https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=434997
또한 이 문제에 대한 많은 포럼, 블로그 등의 게시물이 있습니다.
- 웹 리소스가 잘못되었습니다.생성 중인 axd 매개 변수
- IE 8 메모리 페이지 삭제?
- http://forums.asp.net/t/1373410.aspx?PageIndex=1
- http://forums.asp.net/p/1409964/3085329.aspx
Microsoft는 이 문제에 대응했습니다.
노트는 Internet Explorer 8의 버그입니다.Internet Explorer 팀에서 이 문제를 조사하고 있습니다.
영향: 아직까지는 이 문제가 최종 사용자의 웹 애플리케이션 사용 경험에 영향을 미치지 않는다고 생각합니다. 단 한 가지 부정적인 영향은 JavaScript 추측 다운로드 엔진에서 전송한 허위/잘못된 형식의 요청입니다.구문 분석기에서 스크립트가 실제로 필요할 때, 해당 스크립트는 적절하게 다운로드되어 사용됩니다.
환경:spurious-request는 특정 타이밍 상황에서만 발생하는 것으로 보이며, 문서에 CHARSET 디렉티브가 포함된 Content-Type이 포함된 META HTTP-EQUIV 태그가 나타나고 JavaScript SRC URL이 HTTP 응답 본문의 4096번째 바이트에 걸쳐 있을 때만 발생합니다.
해결 방법:따라서 현재 페이지 내에서 지정하는 대신 HTTP Content-Type 헤더를 사용하여 페이지의 CHARSET를 선언하면 이 문제를 완화할 수 있다고 생각합니다.
그래서, 넣는 것보다는.
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
대신 헤드 태그에서 다음 HTTP 응답 헤더를 전송합니다.
Content-Type: text/html; charset=utf-8
HTTP 헤더에 문자 집합을 지정하면 모든 브라우저에서 성능이 향상됩니다. 문자 집합 선언이 발생할 때 브라우저의 파서가 처음부터 구문 분석을 다시 시작할 필요가 없기 때문입니다.또한 HTTP 헤더를 사용하면 특정 XSS 공격 벡터를 완화하는 데 도움이 됩니다.
참고: META HTTP-EQUIV가 페이지에 없을 때 이 문제가 여전히 발생한다는 보고가 있었습니다.우리는 조사가 더 진행되면 이 의견을 업데이트할 것입니다.
Microsoft에서 2009년 6월 30일 오후 12시 25분에 게시했습니다.
편집: 여전히 가끔 이 예외가 표시되지만 이 버그는 수정된 것으로 보고됩니다.링크
ASP.NET AJAX를 사용하고 있는 것 같습니다.저도 같은 문제를 겪고 있습니다.가끔 이벤트 로그에서 이 예외를 발견하고 요청한 경로는 항상 스크립트 리소스입니다.도끼의
machineKey에서 fixed validationKey와 decryptionKey를 사용해도 문제가 해결되지 않았습니다.
제가 수집한 내용에 따르면, 저는 이 오류가 ViewState와 전혀 관련이 없다고 생각하는 경향이 있습니다. 제 이론은 어떤 이유에서인지 특정 UA가 ScriptResource의 "d" 매개 변수를 엉망으로 만든다는 것입니다.axd. 문제를 일으키는 경로를 수동으로 요청하면 문제를 쉽게 복제할 수 있습니다.이 경우 ViewState가 여기에 적용되지 않더라도 "Invalid ViewState" 예외가 발생합니다.
로그를 조사해 보니 다음과 같은 예가 있었습니다.
이 요청은 OK(200): /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_33Y_9Dq6i10g9Q1NRCY1n0_DNG1nE6-DDBSD6r4EuwoeDzp9mjDDfBNLb1k1&t=41df03cc
이 약간 다른 요청도 OK(200): /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_33Y_9Dq6i10g9Q1NR5ijsxQts4AfbJdACRwmQ8sHt6UAzui3spEnooPneTz01&t=41df03cc
이 요청은 실패하고 500 응답과 Invalid ViewState 예외: /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_3 제품 $ctl00$카트에 추가1$id
자세히 살펴보면 세 가지 요청 모두의 처음 몇 글자는 동일하지만 마지막 요청의 마지막 몇 글자(굵은 글씨)는 분명히 Control ID "products$ctl00$AddToCart1$id"입니다(제품 및 AddToCart라는 이름의 컨트롤을 가지고 있습니다).이 ID가 어떻게 그곳에 도착했는지는 모르겠지만, 저의 경우 이것이 잘못된 ViewState 예외를 모두 발생시키는 원인입니다.
이것이 OP와 같은 경우인지 아닌지는 잘 모르겠지만, 마틴의 요청 URL이 "html"로 끝나는 것을 보았습니다. 이것은 키가 되어야 하는 매개 변수에 대한 약간의 우연입니다...
저는 이 문제 때문에 이미 머리가 아파요.지금까지 제가 발견한 가장 통찰력 있는 게시물은 http://bytes.com/topic/asp-net/answers/861764-invalid-viewstate-system-string-decryptstringwithiv 입니다.
통찰력은?
보기 상태 문제는 짜증나고 짜증납니다. 이 스레드에서 보기 상태 문제에 대해 이야기한 사람이 몇 명 있습니다.그래서, 여기 여러분이 순서대로 볼 수 있는 몇 가지 제안들이 있습니다.
나는 프레디 리오스가 이미 말한 것을 반복할 것입니다.컴퓨터 키를 하드 코딩했는지 확인합니다.이것은 이러한 문제의 대부분을 해결할 것입니다.ScriptResource 링크의 중요한 점은 쿼리 문자열에 d 매개 변수와 at 매개 변수가 있어야 한다는 것입니다.만약 그게 아니라면, 다른 무언가가 잘못됐어요!
완료할 때까지 사용자가 게시하지 않도록 합니다.자바스크립트와 약간의 CSS로 이것을 할 수 있을 것입니다.기억으로는 메타태그로 할 수 있는 방법이 있을 것 같은데 IE만 가능할 것 같습니다.
반응을 일찍 씻어내는 것을 보고 싶습니다.대본 매니저 이후가 가장 좋을 것 같습니다.하지만 당신은 약간의 실험이 필요할지도 모릅니다.
보기 상태가 비대해 보이면 IIS에서 GZip 압축을 설정합니다.
보기 상태가 너무 커져 GZip 압축을 켤 수 없거나 원하지 않는 부작용이 있는 경우.그런 다음 보기 상태를 압축 및 압축 해제할 수 있습니다.http://www.codeproject.com/KB/viewstate/ViewStateCompression.aspx
그래도 보기 상태가 계속 확대되면 보기 상태를 로컬로 저장할 수 있습니다.http://blog.arctus.co.uk/articles/2007/04/23/advanced-asp-net-storing-viewstate-in-a-database/ 은 좋은 출발점입니다.
단일 서버를 수행하는 경우에도 고정 시스템 키를 사용합니다.
이 문제는 시스템 키에 대해 자동 구성을 사용할 때 발생하며 앱 도메인이 재활용될 때마다 새 구성이 나타납니다.이는 보기 상태 유효성 검사, 동적 리소스 쿼리 문자열 암호 해독 및 인증 티켓[기계 키의 다른 용도 삽입]에 영향을 미칩니다.
보기 상태가 너무 클 때 이런 문제를 본 적이 있습니다.프레디가 설명하는 문제 때문에 그런 일이 일어나는 것을 보았습니다.
저는 일반적으로 Viewstate를 사용하는 것을 싫어합니다.View 상태를 모두 해제할 수 있습니까?
저도 이 문제를 겪고 있으며, 제가 찾은 모든 블로그에서 언급된 모든 것(고정된 컴퓨터 키, 보기 상태 크기 등)을 시도했습니다.오류가 ScriptResource에 대한 요청에 로그온한 시간의 99%입니다.axd. Win 2003 서버에서 .net 3.5 SP1을 사용하고 있습니다.이 앱은 50/50의 균형을 맞춘 두 개의 병렬 동일 서버에서 호스팅됩니다.각 서버에는 동일한 컴퓨터 키가 있습니다.
일반적으로 이 오류는 저와 크게 관련이 없지만, 3개월 동안 발생 추세가 크게 상승했습니다.
이 오류가 보기 상태가 UrlEncoded/HtmlEncoded 또는 UrlDecoded가 올바르게 되지 않은 것과 관련이 있다고 생각하는 사람이 있습니까?보기 상태 내에 일부 브라우저가 인코딩된 값으로 대체하는 문자 하위 집합이 있을 수 있습니다.그게 말이 되는지 모르겠네요.
제 생각에, 당신은 반드시 asx 페이지에서 사용해야 할 것 같습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
이것이 나의 문제를 해결합니다.
영어가 아닌 운영 체제를 실행하고 있습니까?
로 "NT Authority\"NT Authority의이 되었습니다.네트워크 서비스"는 다른 언어로 지역화되어 있습니다.
안타깝게도 많은 프로그램에서 계정 이름이 영어 이름으로 하드 코딩되어 있고 Windows(윈도우)의 다른 버전에서 실행될 때 네트워크 서비스를 찾지 못해 이벤트 로그에 모든 종류의 펑키 오류가 발생합니다.
저는 이 문제를 Trend Micro 안티바이러스를 사용하는 사용자로 범위를 좁혔으며 2009년 5월 21일에 Trend Micro 소프트웨어를 업데이트한 후 오류가 발생하기 시작했습니다.이 날짜 이전에는 오류가 없습니다.
문제는 IE8의 미리 보기 다운로드 프로그램인 것 같습니다.
이는 상당히 불분명한 상황에서만 IE8에 영향을 미치는 것으로 보입니다.URL에 추가된 4k 청크의 데이터가 종종 서버에 의해 삭제되기 때문에 무시됩니다.가능성을 높이는 것 중 하나는 느린 네트워크 연결입니다.아래 리소스 중 하나에 있는 사람이 뉴질랜드에 있는 고객들과만 문제가 있다고 언급했습니다.
많은 사람들이 두 개의 개별적인 문제를 설명하고 있는데, 그 중 하나는 위의 질문(잘못된 형식의 URL이 서버로 전송됨)에 설명되어 있습니다.
미리 보기 다운로드 프로그램이 수정되었음을 설명하는 문서:
http://blogs.msdn.com/b/ieinternals/archive/2010/04/01/ie8-lookahead-downloader-fixed.aspx
KB980182 – 문제가 해결된 누적 업데이트:
http://support.microsoft.com/kb/980182
참고: 미리 보기 다운로드 프로그램에서 스크립트를 검색할 수 없는 경우 스크립트가 자동으로 다시 다운로드되므로 .axd 파일의 유효성을 검사하지 않은 이전 유효성 검사 모드로 다시 변경하여 문제의 증상을 제거할 수 있습니다.
<httpRuntime requestValidationMode="2.0" />
언급URL : https://stackoverflow.com/questions/728513/erratic-invalid-viewstate-issue-in-a-net-application
'programing' 카테고리의 다른 글
git 확장명이 없는 이진 파일 무시 (0) | 2023.06.25 |
---|---|
검은색 포맷터 - 특정 다중 라인 코드 무시 (0) | 2023.06.25 |
IP 주소를 가져오는 방법? (0) | 2023.06.25 |
다른 디렉토리에서 git clone (0) | 2023.06.25 |
그룹화된 스타일로 UITableView에서 셀 너비를 설정하는 방법 (0) | 2023.06.25 |