카테고리

분류 전체보기 (510)
문학 (128)
찬양 콘티(Continuity) (80)
Business as heritage (6)
IT . Web (149)
Photo (127)
etc. (20)
Total348,447
Today36
Yesterday147
*20121219 국치가 회복될 사건이 올 때까지 블로그 양쪽은 조의를 표하는 검정색입니다.
Tistory 로고 이미지 티스토리 가입하기!









블로그 이미지

우선 세션 관리방식을 SQL Server 모드로 전환하면 Bin 아래 dll이나 App_Code 아래 cs 파일이 수정되어서 웹사이트가 재시작해도 Session[] 콜렉션에 저장된 값이 사라지지는 않습니다.

다만 cs 파일이 수정될 때 어셈블리 버전 차이가 발생하면서 Session[]에 담긴 값을 다시 객체로 캐스팅할 때 그 유명한... Unable to cast object of type 에러가 발생합니다.

이 문제에 대처하려면.. Session에 담을 클래스들은 따로 dll로 만들어서 관리하거나.. 좀 귀찮지만 객체를 세션에 담을 때 그냥 담지 말고, Xml 직렬화를 하는 방법이 있습니다. 직렬화를 하고 다시 역직렬화를 해서 빼내면 시스템 비용이 있긴 하지만 작은 클래스는 미미한 편이고 어셈블리 버전 차이에는 영향을 안받게 됩니다.(클래스 구성이 많이 바뀌면 문제지만 예외로 하고)

샘플 코드는 아래와 같습니다.

                        A a = new A();
                        StringBuilder sb = new StringBuilder();
                        XmlSerializer x = new XmlSerializer(a.GetType());
                        XmlWriter xw = XmlWriter.Create(sb);
                        x.Serialize(xw, a);
                        xw.Flush();

                        Session["그대의마음속"] = sb.ToString();

이렇게 담아주고 뺄 때는 이렇게 뺐습니다. (스트림을 활용할 수 있는 방법이 몇 가지 있으니 상황에 맞게~)

                        XmlSerializer x = new XmlSerializer(typeof(A));
                        TextReader sr = new StringReader((String)session["그대의마음속"]);
                        A a = x.Deserialize(sr) as A;

여튼 재밌네요. 랭기지 공부하면서 이걸 웹개발 할 때 언제 쓰면 좋을까 싶던 테크닉들이 곳곳에서 필요할 때가 생깁니다.ㅋㅋ


저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by One of Remnants

댓글을 달아 주세요

달력

« » 2017.08
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

최근에 받은 트랙백

글 보관함

티스토리 툴바