Introduction
 
스트리밍 없이 실버라이트 1.0을 사용한 간단한 Javascript 애플케이션을 만들고 같은 호스트의 웹서버에 호스팅을 원합니다. 그러나 인터넷 서비스 공급자는 WPF 가 준비되지 않았고, IIS 는 Unknown content type(XAML) 을 응답합니다. 예를들어, 컨트롤을 만들어도 XAML 이 로드되지 못하면 실버라이트 컨트롤은 공백이 됩니다.
 
이 아티클은 ISP(인터넷 서비스 공급자)나 MIME Type 이 IIS 에 등록되지 않아도 XAML 파일이 블록된 실버라이트 애플케이션에서 사용할 수 있습니다.
 
 
Background
 
Silverlight 컨트롤이 만들어진 후에 XAML 파일이 로드되기 위한 source 프로퍼티를 포함합니다. Visual Studio 2005(필자는 VS2005 를 사용하였다)의 Silverlight Javascript 애플케이션의 코드 생성기를 참조하세요.
 
서버의 XAML 파일을 참조하는 Javascript 함수의 createSilverlight() 가 만들어집니다. 이 코드가 실행되고 Silverlight 가 XAML 파일을 호출할 때, 호출결과가 리턴되지 않고 막혀있다면 blank 페이지가 나타납니다(에러는 없음)
 
 
Solution
 
문제를 해결하는 하나의 방법은 createSilverlight() 메서드의 source 파일명의 확장자를 XML 이나 TXT 와 같이 바꾸십시오. 배포를 준비하고 있고 프로젝트의 종료가 하루전이라면 이것이 가장 빠른 해결책입니다.
 
배포전에 파일 확장자와 Javascript 파일을 바꾸는 것과 같이 배포 문제의 해결방법은 오래걸릴 수도 있습니다. (매우 다양하고 XAML 파일이 하나 이상일 때)
 
XAML 파일을 고유의 ASP.NET Handler 가 있으면 배포와 개발에 있어 훨씬 좋은 해결방법이 됩니다. 이것은 IIS 에 MIME 형태로 등록하거나 web.config 파일을 수정하지 않아도 됩니다. 또한, XAML 과 Javascript 그리고 다른 확정없이 영향을 미치는 실버라이트 애플케이션을 만드는 것에 유의하십시오.
 
public class GetXAMLFile : IHttpHandler
    {
        string fileList = ",scene.xaml,";
        public void ProcessRequest(HttpContext context)
        {
            string fname = context.Request["fname"].ToString().ToLower();
            // check if the file is in xaml file list you want to send
            // for your applications only
            if (fileList.IndexOf("," + fname + ",") == -1)
                context.Response.End();
            context.Response.ContentType = "text/xaml";
            string uri = context.Request.Url.AbsoluteUri;
            string xamlstring = System.IO.File.ReadAllText(
                context.Server.MapPath(fname));
            context.Response.Write(xamlstring);
            context.Response.Flush();
            context.Response.End();
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
 
내용을 보기전에 요청된 파일을 체크하는 라인을 보면 위의 Handler 가 악의적인 애플케이션에 의해 호출되는 것을 피하기 위해 XAML 파일을 고쳐보았습니다.
 
Handler 를 만들고, createSilverlight() 함수의 source 라인을 고쳐보겠습니다.
 
source: 'GetXAMLFile.ashx?fname=Scene.xaml'
 
Silverlight 컨트롤이 ASHX Handler 의 호출로 로드될 때 Client 로 XAML 파일의 내용이 보내지게 됩니다.
 
IIS 와 ASP.NET 의 조합의 경우 다른 웹서버나 비슷한 문제에 대면할 경우 확장 타입의 스크립트를 호출하여 쿼리문자열 또는 XAML 파일의 내용을 보내는 처리를 할 수 있습니다. Response content type 은 ‘text/xaml’ 의 형태로 되는 것에 주의하시면 됩니다.
 
 
License
 
이 아티클은 어떠한 라이센스를 명시하지 않았지만, 이 아티클의 내용이나 다운로드 파일을 포함할 수 있습니다. 계약 내용에 문의사항이 있으시면 아래의 게시판을 통해 문의하세요.
 
제작 라이센스 리스트는 여기에서 볼 수 있습니다.
 
 
About the Author
 
Sriram Chitturi


 
 
Occupation:
Web Developer
Location:
United States

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 땡초 POWERUMC

댓글을 달아 주세요