등록 프로세스의 일련의 단계를 통해 사용자를 실행하는 사용자 지정 Sharepoint 2010 웹 파트가 있습니다. 각 단계에서 필요한 입력이 완료되면 사용자는 표준 서버 측 버튼 컨트롤 인 계속 버튼을 클릭합니다. 이 코드는 업데이트 된 세션 데이터로 동일한 페이지를 새로 고치는 Response.Redirect를 호출하기 전에 유효성 검사와 DB 업데이트를 수행합니다.NLB 환경에서 Response.Redirect timeout
(참고 : 세션 데이터가없는 기존의 세션 객체에 의해 암호화 된 쿼리 문자열 매개 변수로 URL에 보관)
이 솔루션은 내 단일 서버 테스트 환경에서 잘 작동하지만 최대한 빨리 배포로 로드 밸런싱 단계 또는 프로덕션 환경으로 이동하려면 Continue (ERR_TIMED_OUT)를 클릭 한 후 응답을받지 않고 일부 요청을 시간 초과하면됩니다.
- 는 WebPart 로그는는 WebPart가 유효한 URL
- 이 더 서버 리소스 문제 없습니다와 Response.Redirect를 호출 사실에 있음을 보여줍니다. 제한 시간은 1 분 이상으로 설정할 수 있으며 응답을받지 못합니다. 나로드 밸런싱 및 서버 세션에 문제가 믿고 리드 - 나는 부하 균형 서버 중 하나에 등록 를 완료하면
- 모든 것이 잘 작동 분산 서버를로드하기 위해 배포 할 때
- 만 발생합니다. NLB의 서버 노드 중 하나에서로드 균형 조정 된 웹 응용 프로그램과 상호 작용할 때 모든 요청이 특정 서버로 이동한다는 것을 알고 있습니다.
나는 전에 비슷한 문제에 직면했다는 것을 알고 있지만, 몇 년 전만해도 해결책이 무엇인지 기억할 수 없다. Request.Url 특정 서버가 URL (http://internalServer44/myUrl
같은) 대신 외부에서 볼 수로드 균형 ULR을 (같은 http://NlbFarmUrl/myUrl
) 보는 방법입니다
try
{
// get clean URL without query string parameters
string url;
if (string.IsNullOrEmpty(Request.Url.Query))
url = Request.Url.AbsoluteUri;
else
url = Request.Url.AbsoluteUri.Replace(Request.Url.Query, "");
// add encrypted serialized session object
url += "?" + Constants.QueryStringParameterData + "=" + SessionData.Serialize(true);
_log.Info("Redirecting to url '" + url + "'..");
Response.Redirect(url);
}
catch (Exception) { }
세션 데이터를 암호화하는 방법을 잘 모르겠지만 IIRC의 일부 암호화 방법은 '컴퓨터 키'에 의존하며 팜의 모든 서버에 대해 동일하지 않으면 다른 서버에서 읽을 수 없습니다.이것은 viewstate지만 동일하게 적용됩니다 - http://www.codinghorror.com/blog/2004/11/web-farms-and-aspnet-viewstate.html – Ryan