본문 바로가기

Silverlight

[삽질방지] ExternalCallersFromCrossDomain 문제 해결하기


========================================================================================
우선 현재 문제는 뭐냐하면 말이죠.

A.com 에 xap 파일이 있고 B.com 에 html 페이지가 있는데요.

B.com 에서 A.com 의 xap 파일을 호출하는데 이 xap 파일은 다시 A.com 과 통신을 하도록 되어 있어요.

(WebClient나 HttpWebRequest 로, 소켓은 확인 못해봤음. 아마 같을 것으로 추정됨)

근데 문제는 이 xap 파일이 A.com 과 통신을 할때 크로스도메인 이슈가 발생하는데..

서버측에 clientaccesspolicy 나 crossdomain 이 설정되어 있어도

통신을 제대로 못하는 문제인건데요..

이것은 AppManifest.xaml 에 내용을 다소 수정해줌으로써 해결할 수 있습니다.

문제는 AppManifest.xaml 은 Visual Studio 가 자동으로 생성해내는 파일이고

또 xap 파일내에 들어간다는 게 문제인건데요..

이 문제를 해결하기 위해서는 아래와 같이 하세요.
========================================================================================

해결책

AppManifest.xml
파일의 Deployment 엔티티의
ExternalCallersFromCrossDomain 속성값을 FullAccess로 설정합니다.


행동

솔루션 탐색기(Solution Explorer)에서 해당 실버라이트 프로젝트의 Properties 노드 아래의
AppManifest.xml (Manifest File Template)을 엽니다.



그리고  ExternalCallersFromCrossDomain 속성 (붉은 글자 부분)을 추가합니다.

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        ExternalCallersFromCrossDomain="FullAccess"
>
    <Deployment.Parts>
    </Deployment.Parts>
</Deployment>


이렇게 하고 나면 빌드 할 때마다 생성되는 xap 패키지 안에 내용물로,
ExternalCallersFromCrossDomain 속성을 가진 AppManifest.xml 파일이 생성됩니다.

한동안 실버라이트 개발자를 귀찮게할 이 문제는
결국 시간이 깔끔하게 해결해 주리라 믿습니다. (차기 버전에서...) 

[출처] 실버라이트 네이버 카페