Silverlght for dummies #1에 이어 Silverlight에 대해 알아야하는 사항들을 간단히 정리해보자.
통신방식
Silverlight로 작성한 애플리케이션은 사용자 브라우저에서 실행되기 때문에 서버쪽과의 통신을 위해 다양한 방식을 지원한다. 기본적으로는 웹서비스 방식과 소켓 방식을 지원하며, 웹서비스 방식에는 ASMX 웹서비스, WCF SOAP 기반 웹서비스(basicHttpBinding), WCF REST 기반 웹서비스를 지원한다. 또한 일반적인 분산 환경에서의 통신 방식과 다른 특이한 점은 소켓을 제외한 웹서비스 방식은 모두 비동기 (Asynchronous) 방식이라는 점이다.
샌드박스 (Sandbox) 모델
Silverlight 뿐만아니라, 자바 애플릿 등 웹으로부터 다운로드 받아 브라우저 내에서 동작하는 애플리케이션들은 보안상의 이유로 로컬 리소스 (사용자 PC 및 여기에 연결되어 있는 프린터, 스캐너 등 장비 포함)에 대한 접근을 제한하는 Sandbox 모델을 채택하고 있다. 따라서 이러한 보안 제약을 넘어서서 사용자의 편의를 도모하기 위해 위해서는 singning 등의 절차를 통해 사용자가 안심하고 사용할 수 있는 증명을 해주어야 한다. 또한 이러한 Sandbox 모델에서 금지하고 있는 것중에는, 사용자 PC에 다운로드 되어 운영중인 애플리케이션과 자신이 다운로드 된 서버 이외의 다른 서버와의 통신을 금지하는 것이다. 이를 해결하기 위해 제공되는 것이 Cross domain scripting 이다. 즉, 서버 루트에 "여기 접근 가능한 도메인은 다음과 같은 것들이며, 이들로부터 온 접속만 허용합니다"라는 증명서를 놓는 것.. 따라서 SL 애플리케이션이 해당 서버에 접속하려할 때 자신이 다운로드된 서버 도메인이 대상 서버의 접근 허용 리스트에 있을 때에만 대상 서버에 접속하여 원하는 작업을 수행할 수 있다. clientaccesspolicy.xml 혹은 crossdomain.xml 파일을 작성하여 SL 애플리케이션이 접근하는 서버 루트에 놓아야 한다. Silverlight가 위 xml을 찾는 순서는 clientaccesspolicy.xml을 먼저 찾고 이 파일이 없을 경우 crossdomain.xml을 찾는다. 따라서 가급적 clientaccesspolicy.xml이라는 이름으로 제공하면 좋다. 파일에 담길 내용은 유사하다.
JavaScript와 Silverlight간 통신
JavaScript와 Silverlight 애플리케이션 간에는 쌍방향 통신이 지원된다. 즉, JavaScript가 Silverlight를 이용하여 닷넷으로 구현된 메소드를 호출할 수 있고, 또한 Silverlight의 닷넷 코드에서도 자신이 속한 Html 페이지에 정의된 JavaScript function을 호출할 수 있다.
1. Silverlight의 닷넷 코드를 JavaScript에서 사용하기
System.Windows.Browser.HtmlPage 클래스의 RegisterScriptableObject() 메소드를 이용하여 Silverlight 애플리케이션을 등록하고 노출한 메소드에 ScriptableMember라는 attribute를 지정하면 된다.
노출된 Silverlight의 닷넷 코드를 JavaScript에서 사용하는 방법은 아래와 같다.
2. JavaScript fucntion을 Siverlight 닷넷 코드에서 사용하기
아래 그림과 같이 JavaScript function이 정의되어 있다고 가정할 경우...
Silverlight 닷넷 코드안에서 이 JavaScript를 호출하는 방법은 역시 System.Windows.Browser.HtmlPage 클래스를 사용하여 해당 function을 요청하면, System.Windows.Browser.ScriptObject 타입으로 function을 리턴하게 된다. 임의의 닷넷 코드에서 다음과 같은 방식으로 JavaScript function을 호출할 수 있다.

