2009-10-19 2 views
1

IIS7에서 실행되는 asp.net 2.0 웹 응용 프로그램이 있습니다. 그것은 웹 가든과 asp.net 상태 서버를 사용하고 있습니다.Asp.net 2.0 버튼 클릭 방법이 웹 가든에서 일관되게 작동하지 않습니다.

페이지에는 많은 사용자 정의 컨트롤이 있습니다. 사용자 컨트롤 중 하나에서 해당 메서드가 실행될 때마다 로그에 줄을 기록하는 button_click 이벤트에 로깅을 추가했습니다. 버튼을 클릭하면 정기적으로 로그 항목 만 표시됩니다. 버튼을 클릭 할 때 이벤트가 항상 실행되는 것은 아닙니다. 버튼을 클릭 할 때 버튼 클릭 방식이 항상 실행되고있는 것은 아니기 때문에 로깅을 추가했습니다. 우리가보고있는 증거는 우리의 의심을 확인하는 것 같습니다.

웹 가든을 제거하고 사이트를 단일 응용 프로그램 풀로 되돌리면 응용 프로그램이 정상으로 돌아옵니다. 버튼 이벤트가 매번 실행됩니다. 로컬 개발자 컴퓨터에서 응용 프로그램을 실행하면 정상적으로 작동합니다.

다른 사람이 이와 같은 행동을 보았습니까? 문제의 범위를 좁히기 위해 취할 수있는 다음 단계에 대한 권장 사항이 있습니까?

편집 :

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
        Log.Error("Searching..."); 

        SearchArgs args = CtrlToSearchArgs(); 
        SessionManager.SearchQueryString = Request.QueryString; 

        string url = NavigationManager.BuildSearchUrl(args, null, "*** page url removed here ***"); 

        if (args.PageSize.HasValue) 
        { 
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, args.PageSize.Value.ToString()); 
        } 
        else 
        { 
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, "10"); 
        } 

        SessionManager.SearchPanelData = url; 

        //Set the new args into the session 
        SessionManager.SearchControlArgs = args; 

        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        Response.Redirect(url); 
    } 

편집 # 2 : 명확한 설명 -이 여러 서버를 사용하지 않는 설정하고 부하 분산 장치를받지 않는 여기의 요청에 따라 이벤트의 소스입니다. 우리는 단일 서버에서 여러 AppPools를 사용하고 있습니다.

+0

button_click 코드 게시 ... – cjk

답변

0

답변을 게시하는 데 Freddy와 Jason에게 감사드립니다.

문제 해결 과정에서 다시 단일 응용 프로그램 풀로 되돌리기로 결정했습니다. 그것은 어쨌든 물건을 구조화하는 꽤 비범 한 방법처럼 보였습니다. 그러나 그것은 그 문제를 해결하지 못했습니다.

주위를 돌아 다니고 몇 사람이 코드를 검토 한 후 마침내 정적 변수가 포함 된 세션에 저장된 객체가 있음을 발견했습니다. 우리는 그 문제를 해결하고 사이트가 예상대로 작동하기 시작했습니다.

0

로드 균형 조정기에서 고정 세션을 활성화하려고 할 수 있습니다.

이전에는 서버 A에서 페이지를 렌더링 한 것과 비슷한 상황이 발생했지만 포스트 백이 서버 B에 보내져 포스트 백의 유효성을 검사하지 못했습니다.

또는 고정 세션을 사용하는 대신 수동으로 setting your MachineKey을 모든 서버에서 동일하게 조사 할 수 있습니다.

+0

실제로 여러 서버를 실행하거나로드 균형 조정기에서 실행하지 않습니다. 우리는 성능상의 이유 때문에 동일한 서버에서 여러 AppPools를 실행하고 있습니다. – meh

1

는 컴퓨터 키를 설정합니다 http://msdn.microsoft.com/en-us/library/ms998288.aspx

이것은 응용 프로그램 풀 생성 된 컴퓨터 키 변경을 다시 시작할 경우, 즉 지정된 시스템 키가없는 상태에서의 실패를 얻을 때 실패하는 유일한 시나리오 아니다 그것들에 의존하는 것, 즉 뷰 스테이트 유효성 검사는 또 하나입니다 : ASP.NET MVC Validation of ViewState MAC failed

+0

그냥 우리가 기계 키 세트를 가지고 있다는 것을 알았습니다. – meh