2011-02-08 4 views
4

우리가 사용중인 WebFarm은 Session을 지원하지 않습니다. 리디렉션 중에는 데이터를 전달해야합니다. TempData가 Session을 내부에서 사용하기 때문에 TempData dictionary없이 이것을하는 법.ASP.Net MVC - TempData 세션 문제

답변

3

사용자 고유의 TempData 공급자를 작성하여 쿠키에 저장할 수 있습니다. ASP.NET MVC Store TempData in Cookie을 참조하십시오. 숨겨진 입력을 찾고 객체/상태를 해독하고 각 HTTP 요청과의 지속성을 유지하는 기본 클래스 컨트롤러를 가질 수 있습니다.

TempData는 두 컨트롤러 동작 사이에서만 지속됩니다.

편집 :

심지어 디스크에 ... 같은 예제를 사용하고 DB에 직렬화 공급자 쓰기 또는 수 있습니다. 그 문제에 대해, 당신은 Session에 대한 전체 커스텀 대체물을 굴릴 수도 있습니다. 당신은 세션 팩토리 클래스를 생성하고 몇몇 정적 콜렉션의 키를 통해 커스텀 세션 객체를 저장할 것입니다. 그런 다음 위에서 언급 한 쿠키 또는 숨겨진 입력을 통해 세션 키를 추적합니다.

+0

문제가 될 것입니다. 쿠키는 최대 크기 4kb를 허용합니다.이 경우에는 좋은 해결책을 제공해 주시겠습니까? 캐시 공급자와 같이 Velocity를 사용할 수 있습니까? – Thanigainathan

+0

나는 당신이 그것에 대처하기 위해 우리 자신의 수업을 만드는 것에 관해 말한 것을 좋아했다. 내 자신의 Dictionary 를 만들었습니다. 공용 클래스에서 필자가 필요할 때 네임 스페이스를 가져 오기 위해'using' 문을 가져올 수있었습니다. 이것은 TempData, ViewData, Session 및 쿠키가 작동하지 않는 경우에도 작동합니다. – vapcguy

0

이것은 MVC에서 더 많은 것을 배우기위한 매우 유용한 질문이었습니다. TempData가 세션을 사용한다는 사실을 Microsoft가 알고 있다고 가정하는 이유와 같은 몇 가지 질문이 있습니다.

4kb 이상의 개체를 업로드하는 데 문제가 있습니다. 이를 위해 우리 건축가는 그 객체를 분리하여 쿠키에 저장합니다. 아래 블로그의 코드를 사용하여 객체의 직렬화 된 문자열을 분할했습니다.

http://lukencode.com/2010/04/21/split-string-into-array-of-chunks/

는 그래서 SaveTempData 방법에 쿠키를 분할 LoadTempData에서 하나의 문자열로를 수집합니다. 그게 문제가 해결 됐어.

그러나 NVElocity와 같은 분산 캐싱 기술을 항상 사용하는 것이 좋습니다.

0

다음과 같습니다 클래스를 만듭니다

public class GlobalStorage 
{ 
    public static Dictionary<string, object> Device = new Dictionary<string, object>(); 
} 

스토어 :

GlobalStorage.Device.Add("myKey", mydata); 

은 검색 :

내 객체의 크기가 다음을 큰 경우 좋은 solution.But있어
string mydata = GlobalStorage.Device["myKey"].ToString();