Hiiz's Lair

바로아래 포스트에서 RSS Reader페이지를 만들어봤다.

페이지에서 가장 시스템의 자원을 많이 잡아 먹는 부분은
 
등록된 RSS들을 읽어와 GrideView에 바인딩 할 수 있도록 가공하는 부분이다.

이부분은 적절히 캐쉬해준다면 프로그램의 더욱좋은 성능을 끌어낼 수 있다.

아시다시피 asp.net은 컨트롤 별로 캐쉬 설정을 할 수 있다.

따라서, XmlDataSource컨트롤도 캐쉬설정이 가능하다.


XmlDataSource.EnableCaching 속성 (System.Web.UI.WebControls)

속성 값
데이터 소스 컨트롤에서 데이터 캐싱을 사용할 수 있으면 true이고, 그렇지 않으면 false입니다. 기본값은 true입니다.

XmlDataSource 컨트롤은 EnableCaching 속성이 true로 설정되어 있으면 자동으로 데이터를 캐시합니다. 기본적으로 CacheDuration 속성은 무제한 캐시를 나타내는 0으로 설정되며 데이터 소스는 해당하는 XML 파일이 변경될 때까지 데이터를 캐시합니다.


라고 친절하게 MSDN에 나와있다.

그러니까 기본적으로 캐슁설정이 되있고 XML파일이 변경될때까지 캐쉬가 존재한다라는 말이다

이 말대로라면 블로그에 포스트가 업데이트되서 RSS(XML)파일이 변경이되면

내가만든 페이지에도 바로 그 업데이트가 적용되어야 하는게 아닌가??

그런데 내가 만든페이지에서 캐쉬설정을 그냥 내버려뒀더니

제대로 캐쉬를 안해서 바로바로 포스트가 업데이트되자 않았다.
(처음에는 웹서버나 asp.net페이지 캐쉬문제인줄로만 알았다;)

아무튼 아래처럼 명시적으로 써주면 잘 동작한다.

<asp:XmlDataSource

    ID="XmlDataSource1"

   runat="server"

   enablecaching="True"

   cacheduration="0">

</asp:XmlDataSource>


ps. 참고로 스크랩한 포스트의 경우 RSS자체에 안올라갈 수 있다.

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > asp.net' 카테고리의 다른 글

[asp.net] XmlDataSource Cache 설정  (0) 2007/12/11
[asp.net] RSS이용, 지인들 포스트들을 한눈에.  (1) 2007/12/11
Posted by Hiiz

사용자 삽입 이미지

asp.net 2.0 버젼으로 제작



http://kcc.kookmin.ac.kr/rss/index.aspx


asp.net 2.0 버젼으로 만들어봤다.

등록된 블로그들의 포스트를 날짜순으로 정렬하여 20개의 포스트를 하나의 게시판형태로 보여준다.
(주소를 등록하는 페이지가있다.)

동작하는 순서는 다음과같다.

1. 등록되있는 RSS들에서 최대 5개씩의 Item노드들을 추출하여

(너무많은  item노드들을 추출하면 가공하는데 시간이 많이 걸리니까 5개만 뽑는다. 내맘이다-_-;;)

2. 새로운 XmlDocument에 Insert하고

3. 이를 XmlDataSource객체로 넘겨주고

4. XmlDataSource에서

    xsl로 GridView가 알아먹을 수 있도록 XML을 가공하고 날짜순으로 정렬 후,

    XPath로 20개의 노드만 선택한뒤

5. GridView에 바인딩한다.


*RSS에서 아이템노드를 걸러내는데는 XPath를 사용하면된다.

*날짜순정렬은 RSS가 제공하는 GMT문자열을 비교가능한 숫자로 변환후 XSL로 정렬했다.

*RSS가 제공하는 XML은 GridView에서 바인딩할 수 있는 형식이 아니다. 따라서, 이를
 
  GridView가 알아먹을 수 있도록 변환해야하는데 이는 XSL로 가능하다.


XPath나 XSL를 모르겠다면 검색해보도록하자.

머리 조금 굴리면 대충이해가능하다-_-;

실제 사용한 xsl파일은 첨부한다.




아래부터는 비교적 자세한 설명.

첫째로, 1번 과정에서 RSS들에서 내가 필요한 item노드들만 추출하는 것

  -XPath를 사용하면 간단하다

둘째로, 2번과정에서 메모리에 새로생성한 XmlDocument객체에 1번에서 뽑아온 item노드들을 Insert하는 것

  -XmlDocument객체에 Append메쏘드가 있다

셋째로, 4번과정에서 날짜순으로 정렬한 item노드들을 GridView에 바인딩할 수 있도록 가공하는 것

  -item노드의 자식노드의 값이 item노드의 attribute가 되어야한다. 오른쪽위에 첨부파일을 참고.

 (ex. <item><title>포스트제목</title></item>  ->  <item title="포스트제목"></item>)

  -xsl로 Xml문서를 원하는 형태로 가공가능하다. 원본 Xml은 변경되지않고 출력되는 형태만 변한다.

넷째로,  item노드들을 날짜순으로 정렬하는 것

  -GMT날짜 문자열을 asp.net에서 64비트 int형으로 변환후 xsl로 정렬한다.

 -xsl이 지원하는 정렬은 문자열비교 또는 숫자비교형식이라 GMT날짜는 문자열 정렬로 바른값을 얻지 못한다.

    따라서, GMT날짜문자열을 64비트 int형으로 변환후 숫자비교형식으로 정렬했다.

 -나중에 GridView에 바인딩할때 64비트 int형으로 변환된 날짜를 DateTime객체로 복원후 문자열로 변환한다.

  -xsl로 Xml문서를 정렬가능하다. 원본 Xml은 변경되지않고 출력되는 형태만 변한다.

다섯째로, GridView에 바인딩해서 20개의 포스트만 보여주는 것

  -XPath로 20개의 노드만 선택할 수 있다.


다음 포스트는 이폐이지와 관련하여 XmlDataSource컨트롤의 캐슁설정!


ps. XmlDataSource객체를 사용하여 GridView에 바인딩하면,
 
     GridView가 기본으로 제공하는 정렬기능은 사용하지 못 하는 것 같다.

    그러니 xsl사용법 찾아보기 귀찮아 그냥 GridView에 바인딩후

    GridView의 소팅메쏘드로 소팅하려는 생각은 버리도록하자_-_;;

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > asp.net' 카테고리의 다른 글

[asp.net] XmlDataSource Cache 설정  (0) 2007/12/11
[asp.net] RSS이용, 지인들 포스트들을 한눈에.  (1) 2007/12/11
Posted by Hiiz