때로는 원격에 있는 데이터 파일을 읽어야 하는 경우가 있다. 예를 들어 동적으로 생성되는 데이터를 미리 웹 서버에 캐싱해두고 클라이언트 머신에서 읽어 오려는 경우가 있을 것이다. 달봉이가 지금 참여하고 있는 프로젝트에서는, 클라이언트에서 시스템이 구동될 때 항상 데이터베이스에서 메뉴를 조회해와서 출력해주는 구조로 되어 있다. 그러나 시스템의 운영시에는 메뉴의 수가 너무 과도해져서 시스템의 구동 시간이 길어질 것으로 예상되고 있다. 해서 메뉴가 변경될때마다 XML형태로 해서 웹 서버에 저장해놓고 클라이언트의 시스템이 구동될 때 그 파일을 바로 읽어 오는 방식을 고려하고 있다.
이 포스트에서는 이런 경우 사용할 수 있는 .NET의 API를 소개한다.
HTTP를 통해서 원격의 파일 접근하기
다음은 웹 서버에 있는 데이터를 접근하는데 사용할 수 있는 클래스들이다.
네임스페이스 : System.Net (http://msdn2.microsoft.com/en-us/library/system.net.aspx ) 클래스 : WebClient (http://msdn2.microsoft.com/en-us/library/system.net.webclient.aspx ) HttpWebRequest(http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.aspx ) |
데이터는 정적인 파일일 수도 있고, 아니면 텍스트나 XML 데이터를 반환하는 ASP.NET 애플리케이션 페이지일 수도 있다. 다음은 정적 파일을 읽어와서 Stream으로 반환하는 샘플 코드이다.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse res = (HttpWebResponse)req.GetResponse(); Stream stream = res.GetResponseStream(); |
만약 반환되는 데이터가 XML 형식이라면 데이터를 얻는 가장 쉬운 방법은 XmlDocument(http://msdn2.microsoft.com/en-us/library/system.xml.xmldocument.aspx ) 클래스를 사용하는 방법일 것이다.
public static void ReadXmlStream(MenuSourceProvider provider, Stream stream) { // XML로 부터 새로운 메뉴 트리를 로드 한다. XmlDocument xmlDoc = new XmlDocument(); XmlNode xmlNode;
xmlDoc.Load(stream); //지금부터 xmlDoc객체를 이용해서 작업을 하면 된다. // 자세한 내용은 Reading an XML Document into the DOM(http://msdn2.microsoft.com/en-us/library/azsy1tw2.aspx ) 및 관련 MSDN 문서를 참고한다. |
웹 서버 파일 접근 권한
HTTP를 통해서 원격 웹 서버의 데이터를 접근할때는 보안을 고려해야 한다. 기본적으로 ClickOnce 애플리케이션은 그 배포 형태에 따라 네트워크 리소스에 대한 접근이 제한적이다. 다음은 배포 전략과 그에 따라 기본적인 웹 접근 권한을 나타내고 있다.
배포 형태 | 기본적인 네트워크 권한 |
웹 서버 인스톨 | 애플리케이션이 배포된 웹 서버에만 접근할 수 있다. |
파일 공유 서버 인스톨 | 웹 서버를 접근할 수 없다. |
CD-ROM 인스톨 | 어떤 웹 서버도 접근할 수 있다. |
물론 Full Trust를 갖는 ClickOnce애플리케이션은 어떤 웹 서버도 접근할 수 있다.
기타 원격의 데이터를 접근하는 방법으로 웹 서비스 클라이언트를 제작하거나 또는 직접 데이터베이스 서버에 접근하는 방법도 있다. 이 방법에 대해서는 익히 잘 알고 있을 것으로 생각한다.
참조 문서
http://msdn2.microsoft.com/en-us/library/d8saf4wy.aspx
'IT 살이 > 04. 기술 - 프로그래밍' 카테고리의 다른 글
ClickOnce에서 변경되지 않은 어셈블리의 다운 여부 테스트 (0) | 2009.04.23 |
---|---|
[연재 02] 로컬 데이터 파일 읽기 (0) | 2009.04.23 |
[연재 01] 데이터 파일, ClickOnce 애플리케이션과 함께 배포하기 (0) | 2009.04.23 |