달력

032010  이전 다음

  •  
  • 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
  •  
  •  
  •  

원본: http://silverlight.net/Quickstarts/Remote/ed86e719-0da0-49e1-a9e1-b31f483070d4.aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하세요. 엘리입니다.

이번 시간은 RSS 2.0 또는 Atom 1.0과 같은 Syndication 서비스에 액세스할 수 있는 Silverlight 클라이언트를 만들어 보도록 하겠습니다.

 

사전 준비 사항

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008용 Silverlight Tools 베타 2

- Silverlight SDK 2.0 베타 2

 

Silverlight 웹 서비스 지원에 대해서 좀 더 자세한 정보는 Silverlight 서비스 예제를 참고하시기 바랍니다.

 

먼저 Silverlight 클라이언트 응용 프로그램을 만들어 보도록 하겠습니다.

 

1. Visual Studio 2008을 열어 파일 새 프로젝트를 선택합니다. 프로젝트 형식을 Silverlight로 선택하고 Silverlight 응용 프로그램 템플릿을 선택합니다.

 

2. 프로젝트 이름을 원하는 것으로 입력하시고 확인을 클릭합니다. 저 같은 경우는 EloiSyndication으로 하였습니다.

 

3. Silvierlight 응용 프로그램 추가 창에서 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하고 확인을 클릭합니다.

 

Silverlight 응용 프로그램에서 Syndication 관련 작업을 위해 System.ServiceModel.Syndication.dll을 참조에 추가합니다.

 

1. 솔루션 탐색기에서 참조를 마우스 우측 클릭을 하여 참조 추가를 선택합니다.

사용자 삽입 이미지
2.
참조 추가 창의 .NET 탭에서 System.ServiceModel.Syndication을 선택하고 확인을 클릭합니다.
사용자 삽입 이미지
3.
아래 코드를 Page.xaml.cs 파일에 추가합니다.

 

using System.ServiceModel.Syndication;

using System.Xml;

 

다음은 syndication feed 요청을 위한 HTTP request를 만듭니다.

 

1. 먼저 이 컨트롤에서 액세스하기 원하는 syndification feed 하나를 찾아 그 주소를 메모해둡니다. 이 예제에서는 http://www.setisigns.net/rss를 사용하겠습니다. 크로스 도메인을 가능하기 위해 feed를 호스팅하는 도메인의 루트에 Clientaccesspolicy.xml이나 Crossdomain.xml 파일을 위치 시켜야합니다.

(: http://www.setisigns.net/Clientaccesspolicy.xml, http://www.setisigns.net/Crossdomain.xml)

 

Clientaccesspolicy.xml

<?xml version=”1.0” encoding=”utf-8”?>

<access-policy>

    <cross-domain-access>

        <policy>

    <allow-from http-request-headers=”*”>

        <domain uri=”*”/>

    </allow-from>

    <grant-to>

        <resource path=”/” include-subpaths=”true”/>

    </grant-to>

</policy>

</cross-domain-access>

</access-policy>

 

Crossdomain.xml

<?xml version=”1.0”?>

<!DOCTYPE cross-domain-policy SYSTEM

 “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>

<cross-domain-policy>

    <allow-http-request-headers-from domain=”* “ headers=”*” />

</cross-domain-policy>

 

 

2. Page.xaml.cs 파일을 열어 Page() 메서드 안에 받고자 하는 syndication feed uri를 설정하여 HTTP request를 만듭니다. 좀 전에 메모해둔 feed 주소를 사용합니다.

 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(“http://www.setisigns.net/rss”));

 

3. 비동기 HTTP request를 만들고 콜백을 등록합니다.

 

request.BeginGetRespone(new AsyncCallback(responseHandler), request);

 

4. 위 코드를 포함한 Page 메서드는 아래와 같습니다.

 

public Page()

{

    // Required to initialize variables

    InitializeComponent();

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(“http://www.setisigns.net/rss”));

    request.BeginGetResponse(new AsyncCallback(responseHandler), request);

}

 

다음은 스트림에 대한 XMLReader를 받고 SyndicationFeed 클래스 인스턴스를 만듭니다.

 

1. responseHandler 콜백 함수에서 HTTP response를 받습니다.

 

void responseHandler(IAsyncResult asyncResult)

{

    HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

    HttpWebResponse respone = (HttpWebResponse)request.EndGetResponse(asyncResult);

}

 

2. responseHandler에 스트림을 받는 XML 리더를 만들고 SyndicationFeed 클래스 안에 그 리더를 로드합니다.

 

XmlReader reader = XmlReader.Create(response.GetResponseStream());

SyndicationFeed feed = SyndicationFeed.Load(reader);

 

이제 SyndicationFeed를 사용하여 실제 syndication feed의 출력 부분의 코드를 작성합니다.

 

1. Page.xaml 파일을 열어 Grid안에 TextBlock을 추가합니다.

 

<TextBlock x:Name=”feedContent” />

 

 

2. SyndicationFeed 개체가 생성되고 각 SyndicationItem 개체에 액세스하는 Items 컬렉션으로 루프를 돌립니다. 이 예제는 제목과 TextBox 컨트롤에 각 항목의 날짜를 추가합니다.

 

foreach (SyndicationItem item in feed.Items)

{

    feedContent.Text += “* “ + item.Title.Text + Enviroment.NewLine;

    feedContent.Text == “ Published on: “ + item.PublishDate + Enviroment.NewLine;

}

 

3. 비동기 요청 콜백 함수는 아래와 같습니다.

 

void responseHandler(IAsyncResult asyncResult)

{

    HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

 

    XmlReader reader = XmlReader.Create(response.GetResponseStream());

    SyndicationFeed feed = SyndicationFeed.Load(reader);

 

    Foreach (SyndicationItem item in feed.Items)

    {

        feedContent.Text += “* “ + item.Title.Text + Enviroment.NewLine;

        feedContent.Text += “  Published on: “ + item.PublishDate + Enviroment.NewLine;

}

}

 

4. 이제 Ctrl + F5를 눌러 브라우저에서 feed 리스트를 확인하시기 바랍니다.

 

즐거운 추석 연휴 보내시고 맛있는 것도 많이 드세요. ^^ 고향에 내려가시는 분들은 오고 가시는 길 많이 힘드시겠지만 가족들과의 만남이 더 뜻 깊을 거라 믿습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-