programing

코드가 최적화되었거나 네이티브 프레임이 호출 스택의 맨 위에 있으므로 식을 계산할 수 없습니다.

javajsp 2023. 5. 20. 00:13

코드가 최적화되었거나 네이티브 프레임이 호출 스택의 맨 위에 있으므로 식을 계산할 수 없습니다.

오류가 발생했습니다.

코드가 최적화되었거나 네이티브 프레임이 호출 스택의 맨 위에 있으므로 식을 계산할 수 없습니다.

리피터의 아이템 명령 이벤트에서 새 페이지로 리디렉션했습니다.다음 행에서 오류가 발생합니다.

string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);

누가 저를 도와주실 수 있나요?거기에 무슨 문제라도 있습니까?_COMPlusExceptionCode-입니다.532459699.

Request.Redirect(url,false);

false현재 페이지의 실행을 종료할지 여부를 나타냅니다.

다과같 주펼다니칩을 두 주장을 .Response 아래와 같이 거짓입니다.

Response.Redirect(url,false);

결의안

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.

  • 응답용.끝으로 HttpContext를 호출합니다.현재.응용 프로그램인스턴스.응답 대신 요청() 메서드를 완료합니다.End - 코드 실행을 Application_EndRequest 이벤트로 우회합니다.

  • 응답용.리디렉션, 오버로드 사용, 응답.응답 대한 내부 호출을 억제하기 위해 endResponse 매개 변수에 대해 false를 전달하는 리디렉션(Stringurl, boolendResponse).. 예:Response.Redirect ("nextpage.aspx", false); 이 해결 방법을 사용할 경우 응답을 따르는 코드입니다.리디렉션이 실행됩니다.

  • 서버용.전송, 서버를 사용합니다.대신 메서드를 실행합니다.

증상

응답을 사용하는 경우.끝, 응답.리디렉션 또는 서버.전송 메서드, ThreadAbortException 예외가 발생합니다.Try-catch 문을 사용하여 이 예외를 탐지할 수 있습니다.

원인

응답.End 메서드는 페이지 실행을 종료하고 응용 프로그램의 이벤트 파이프라인에 있는 Application_EndRequest 이벤트로 실행을 이동합니다.반응을 따르는 코드 행입니다.종료가 실행되지 않았습니다.

이 문제는 응답에서 발생합니다.리디렉션 및 서버.두 메서드 모두 응답을 호출하므로 메서드를 전송합니다.내부적으로 끝납니다.

상황

이 동작은 의도적으로 수행됩니다.

특성.

문서 ID: 312629 - 마지막 리뷰:2012년 8월 30일 - 개정판: 4.0

적용 대상

  • Microsoft ASP.NET 4.5
  • Microsoft ASP.NET 4
  • Microsoft ASP.NET 3.5
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0

키워드: kbexceptthing kbprb KB312629

출처: PRB: 응답을 사용하는 경우 스레드 중단 예외가 발생합니다.끝, 응답.리디렉션 또는 서버.갈아타다

제가 조사하던 버그에서 응답이 있었습니다.리디렉션()이 예기치 않은 위치에서 실행되었습니다(읽기: 부적절한 위치 - 멤버 속성 getter 메서드 내부).

문제를 디버깅할 때 "식을 평가할 수 없습니다...예외:

  1. 에 대한 검색을 합니다.Response.Redirect()두 번째 매개 변수 endResponse = false로 만들거나,
  2. 리디렉션 호출을 일시적으로 비활성화합니다.

디버거의 "스텝 스루"가 해당 위치에 도달하기 전에 리디렉션 호출을 실행하는 것처럼 보이기 때문에 이 작업은 좌절되었습니다.

이 문제의 원인과 오류 해결 방법은 다음 링크를 확인하십시오.

http://support.microsoft.com/kb/312629/EN-US/

Microsoft 지원 문서:

PRB: 응답을 사용하는 경우 스레드 중단 예외가 발생합니다.끝, 응답.리디렉션 또는 서버.인쇄 전송 인쇄 전자 메일

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.응답용.끝으로 HttpContext를 호출합니다.현재의.어플사례.응답 대신 요청 메서드를 완료합니다.End - 코드 실행을 Application_EndRequest 이벤트로 우회합니다.

응답용.리디렉션, 오버로드 사용, 응답.응답에 대한 내부 호출을 억제하기 위해 endResponse 매개 변수에 대해 false를 전달하는 리디렉션(Stringurl, boolendResponse).끝.

예를 들어, 응답입니다.리디렉션("nextpage.aspx", false);

이 해결 방법을 사용할 경우 응답을 따르는 코드입니다.리디렉션이 실행됩니다.서버용.전송, 서버를 사용합니다.대신 메서드를 실행합니다.

저도 같은 문제가 있었고, 까다로웠습니다.저는 Ext를 사용하고 있기 때문입니다.Jsjavascript 라이브러리입니다.Ajax 호출에서 액세스한 서버 측 코드에서 response.redirect를 수행하는 경우 문제가 발생합니다.Ext.js에는 Ext에 대한 해결 방법이 있습니다.리디렉션 방법.

이 코드를 사용하여 문제를 해결합니다.

string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Uploadfile\\" + fileName;
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bt = new byte[fs.Length];
fs.Read(bt, 0, (int)fs.Length);
fs.Close();
Response.ContentType = "application/x-unknown/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName;+ "\"");
try
{
    if (bt != null)
    {
        System.IO.MemoryStream stream1 = new System.IO.MemoryStream(bt, true);
        stream1.Write(bt, 0, bt.Length);
        Response.BinaryWrite(bt);
        //Response.OutputStream.Write(bt, 0, (int)stream1.Length);
        Response.Flush();
        // Response.End();
    }
}
catch (Exception ex)
{
    Response.Write(ex.Message);
    throw ex;
}
finally
{
    Response.End();
}

사용할 수도 있습니다.

다른 사람이 제가 한 문제에 부딪혔을 때를 대비해서 저는 응답을 사용하고 있습니다.비동기 트리거 버튼 종료()

<asp:AsyncPostBackTrigger ControlID="btn_login" />

업데이트 패널에 있습니다.저는 최고는 아니지만 일반 우편으로 전환했지만 효과가 있었습니다.

<asp:PostBackTrigger ControlID="btn_login" />. 

제가 페이지에서 방향을 수정하는 것뿐이었기 때문에 이것은 실행 가능한 해결책이었습니다.

업데이트 패널 및 링크 버튼을 사용하여 엑셀을 다운로드하는 경우 포스트백 트리거를 추가하는 것보다 패널 내부에 있습니다.

<asp:PostBackTrigger ControlID="lnkTemplate" /> 

그리고 코드 뒤에 있는 내부 클릭 이벤트에서

string ServerPath = System.Configuration.ConfigurationManager.AppSettings["FilePath"] + "Template.xlsx";
System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(ServerPath));

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/octet-stream";
 HttpContext.Current.Response.TransmitFile(file.FullName);
 HttpContext.Current.Response.Flush();
 HttpContext.Current.ApplicationInstance.CompleteRequest();

이것을 사용하세요, 항상 저에게 효과가 있습니다.

Response.Redirect(Request.RawUrl, false);

여기, 응답.리디렉션(요청).RawUrl)은 현재 컨텍스트의 URL로 리디렉션하는 반면, 두 번째 매개 변수 "false"는 endResponse 여부를 나타냅니다.

이 문제는 검증 규칙이 있는 모델에서 mvc에 면도기 페이지가 있을 때 발생할 수 있습니다.양식에서 게시할 때 일부 필드에 유효성 검사 오류를 표시하는 것을 잊으면 이 메시지가 나타날 수 있습니다.추측: 게시하는 방법이 다르고 다른 소스에서 사용하거나 원래 요청을 처리하는 방법과 다른 위치에 있는 경우일 수 있습니다.

따라서 서로 다르기 때문에 원래 페이지로 돌아가 실행 및 모델 상태가 동일하지 않기 때문에 오류를 표시하거나 처리할 수 없습니다.

발견하기는 약간 어려울 수 있지만 실수하기는 쉽습니다.수신 방법이 게시할 수 있는 모든 방법을 실제로 확인하는지 확인합니다.

예를 들어, 서버 측 유효성 검사를 통해 유효성 검사에서 허용된 최대값보다 큰 문자열을 실제로 작성할 수 없는 경우에도 수신 메서드에 게시하는 다른 방법과 소스가 있을 수 있습니다.

언급URL : https://stackoverflow.com/questions/2041482/unable-to-evaluate-expression-because-the-code-is-optimized-or-a-native-frame-is