Microsoft MVP성태의 닷넷 이야기
웹서비스에서 캐시를 사용하고 싶습니다. [링크 복사], [링크+제목 복사],
조회: 16904
글쓴 사람
김용환 (70003431 at dreamwiz.com)
홈페이지
첨부 파일
 

jquery 를 이용해서 html에서 웹서비스를 이용하는 프로젝트를 하고 있습니다.
로그인해서 캐시에 데이타를 집어넣고 로그아웃때 지우는걸 하고싶습니다.
로그인페이지에서 로그인버튼을 누르면 웹서비스에서 체크한다음 캐시에 값을 넣어두고
요청마다 그 캐시의 값을 읽는게 하고싶습니다.

트리데이타를 위해 쿼리를 날리고 그 데이타를 재귀함수를 통해 다시 데이타테이블을 만들어서
그 데이타테이블을 데이타셋에 담아서 아래의 함수를 호출합니다.

        private void SetTreeData(DataSet ds)
        {
            DataTable dtCache = (DataTable)HttpContext.Current.Cache["tree"];
            DataTable dtTreeData = ds.Tables[0];

            if (dtCache != null)
            {
                if (!dtCache.Equals(dtTreeData))
                {
                    SetCache(dtCache, dtTreeData);
                }
            }
            else
            {
                SetCache(dtCache, dtTreeData);
            }
        }

        private void SetCache(DataTable dtCache, DataTable dvTreeData)
        {
            CacheDependency dep = new CacheDependency(Server.MapPath(@"/TreeData.html"));

            string sPath = Server.MapPath(@"/TreeData.html");
            FileStream fs = new FileStream(sPath, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            foreach (DataRow dr in dvTreeData.Rows)
            {
                sw.WriteLine(dr["li"].ToString());
            }
            sw.Flush();
            sw.Close();

            dtCache = dvTreeData;
            HttpContext.Current.Cache.Insert("tree", dtCache, dep, DateTime.Now.AddDays(1), TimeSpan.Zero);
        }

데이타를 읽어서 파일에 쓴다음 그걸 읽어서 트리에 뿌리고 있는데.
이걸 매번 수행해서 문제가 있습니다.
그래서 캐시에 넣어놓고 있다면 파일에 쓰는부분과 캐시에 넣는 부분을 하지 않고 싶은데...
잘 안되고 있습니다...

이게 완료되면 로그인후 캐시에 넣고 쓰는걸 해보려고 했는데...
현 상황으로 진행이 안될거 같습니다...
도움이 절실합니다 ㅠㅠ








[최초 등록일: ]
[최종 수정일: 10/14/2008]


비밀번호

댓글 작성자
 



2008-10-14 09시52분
음... ^^; 즉, 위의 코드가 동작이 안 된다는 것인가요?

보면,,, 뭔가 좀 이상하긴 한데요. SetTreeData에서 dtCache가 null 나온 경우, 그걸 SetCache(dtCache, dtTreeData);에 넘겨주고 있는데요.

Call by Ref와 Call by Value에 대해서 헷갈리시는 것 같습니다. 비록 닷넷이 기본적으로 Call by Ref로 참조형에 대해서 처리해준다고 해도, 역시나 넘어가는 것은 참조값에 대한 복사값일 뿐입니다. 즉, null을 넘기는 경우 그 null에 대한 복사본이 스택에 전달된다는 것이지요.

그로 인해, SetCache 안에서 dtCache = dvTreeData로 값을 넣었다고 해서, SetCache 함수 밖에 있는 dtCache 인자가 할당되어져 있는 것은 아닙니다. 그런 경우, 굳이 해야한다면 SetCache(ref DataTable dtCache, ...);와 같은 식으로 정의하셔야 합니다.
kevin25
2008-10-15 09시25분
답변 주셔서 감사합니다 ㅠㅠ
null 이 나온경우 if (!dtCache.Equals(dtTreeData)) 캐시데이타랑 넘어온 트리데이타랑 다르면
함수를 호출하게 만들었습니다.
캐시에 데이타가 없거나 데이타가 변경되었으면 트리데이타로 캐시를 만들려고 한건데...
찬찬히 다시 살펴보겠습니다...
코드를 떠나 처음 함수가 호출되어서 캐시를 생성했을때 지우지 않는이상 살아있긴 한게 맞는지 궁금해집니다 ㅡㅜ
kimyh
2008-10-15 11시28분
뭘 잘못했는지 알았습니다...
CacheDependency dep = new CacheDependency(Server.MapPath(@"/TreeData.html"));
이넘이 파일이 변하면 캐시를 날리는데...로직은 파일을 계속 고쳐서 그랬네요 ㅡㅡ;;
그래서 dep 부분을 null로 캐시생성을 했더니 캐시는 존재하는군요 ㅠㅠ
대신 데이타테이블과 데이타테이블의 비교가 안되네요...
될까? 하긴 했었는데...
if (!dtCache.Equals(dtTreeData)) 이부분이 비교가 되질 않는거 같아서 어째야할지
고민이 바뀌었답니다 ㅡㅜ
kimyh

... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4831guest5/15/201719900WPF .net 3.5에서 TextBox 한글 문제 [3]
4830초보자5/7/201724297프로그램 비정상 종료 메시지 창 없애는 방법 [4]
4829윤현수4/26/201722794System.Text.Encoding 질문 [1]
4828jaem...4/20/201717061시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/201719154매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/201716329CxImage 문자 출력 [1]
4825플메4/10/201716038덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/201715671win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/201716579windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/201718664글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201733375파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/201717027오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/201718801C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201728844DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/201717587서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/201720020C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/201716114.net core linux 오류 [2]
4814김솔지3/13/201716911인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201718652멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201719000.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201722027C# 가상 시리얼 [4]
4808이길용2/9/201720022WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201727357WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201720293WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201717233특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201716686    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...