Microsoft MVP성태의 닷넷 이야기
웹서비스에서 캐시를 사용하고 싶습니다. [링크 복사], [링크+제목 복사],
조회: 17723
글쓴 사람
김용환 (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

... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...
NoWriterDateCnt.TitleFile(s)
5227세퉁9/23/201917364WPF Textblock 폰트 크기에 따라 글자 색이 깨지는 현상이 있습니다. [3]파일 다운로드1
5226김대훈9/23/201915869정말 황당한 경우입니다.. [2]
5223김태균9/19/201915698책 소개 링크가 7.1버전판으로 이어집니다. [1]
5222냥냥이9/14/201916064프로그래밍 논리력이 많이 부족합니다 [3]
5219티지레몬9/9/201918033c# PCB 자동화 프로그램(윈도우 폼 위주로 작업) 제작 준비 [3]
5218민성9/9/201916326안녕하세요 WPF에서 xaml 안에 다른 xaml을 넣고 싶습니다. [1]파일 다운로드1
5216WPF9/8/201917199WPF에서 XAML Islands를 사용하여 Win2D를 사용하니 그래픽 품질이 저하됩니다. [2]파일 다운로드1
5215허송세월9/5/201916932중복실행 방지 관련 문의 [2]파일 다운로드1
5214Jang...9/4/201916346[DB 테이블의 데이터 변경에 대한 알림 처리] SQL-Server말고 MySQL은 불가능하겠죠? [1]
5213진우8/31/201915374c# 람다 변수 캡쳐 문의 [2]
5212심성보8/29/201917893Clipboard내 여러개의 이미지를 PictureBox로 불러오는 문제 [2]
5211최휘철8/24/201916780CLR20r3 관련된 윈도우 오류입니다. ㅠㅠ 도와주세요. / 아래글 관련하여 관련 파일 올려 드려요^^ [1]파일 다운로드1
5210최휘철8/23/201921750CLR20r3 관련된 윈도우 오류입니다. ㅠㅠ 도와주세요. [5]
5209세퉁8/21/201916222폰트 파일 속성 값을 가져오는 방법 질문 드립니다. [2]파일 다운로드1
5208홍길동8/19/201917851DebugDiag에서 .Net의 Stack Trace를 Windbg에서는 어떻게 볼 수 있나요? [3]
5207민성8/16/201915673네 소스 전체를 올리도록 하겠습니다. [2]파일 다운로드1
5206민성8/14/201916173전 재현 가능하다고 봤는데 다시올리도록 하겠습니다. [1]
5205miny...8/14/201915685안녕하세요 .WPF ListBox시 체크박스가 있는데 체크박스에서 체크가 되었는지 알수 있는 방법이 있을까요? [1]
5204영민8/8/201919924안녕하세요 디버깅시 콘솔창을 띠어서 볼수가 없나요? [7]
5202민성8/6/201915909WPF에서 <Application.Resources에 xaml에 있는 icon 값을 저장하고 xaml에 불러다 사용하고 싶은데요 [1]
5201김대훈8/3/201916079상속시 생성자에 대해 질문드립니다 [3]
5200농상7/30/201919154foreach로 데이터 변경 [2]
5190오리다람7/20/201916116질문드립니다. [3]
5189진우7/19/201915497C# 스레드풀 코어별 실행 문의 [2]
5188황태관7/19/201915048비주얼베이직 2019 실행 할때 마다.. [3]
5187플하7/19/201918382UWP 관련 궁금한 사항에 대해서 [1]
... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...