2010-05-17 4 views
0

저는 WCF 서비스를 사용하는 Silvelright App으로 작업하고 있습니다. crossdomain과 clientaccesspolicy xml을 IIS의 wwwroot와 application 폴더에 배치했습니다!도메인 간 정책

아직 클라이언트가 서비스와 통신 할 때 다음과 같은 오류가 발생합니다. URI 'http://localhost:1528/MyService.svc'에 요청을하는 동안

오류

가 발생했습니다. 이것은 적절한 크로스 도메인 정책이없는 크로스 도메인 방식으로 서비스에 액세스하려고 시도하거나 SOAP 서비스에 적합하지 않은 정책으로 인해 발생할 수 있습니다. 당신은

도와주세요 ......을 게시 할 수있는 서비스의 소유자에게 문의해야 할 수도 있습니다! 감사

clientaccesspolicy.xml이 서비스와 동일한 포트에 있어야
+0

WCF 서비스가 현재 어떻게 게시되는지에 대해 좀 더 구체적으로 설명해주십시오. – Johannes

+0

안녕하세요, http://bit.ly/aPzq68이 나를 위해 일했습니다! – Jayesh

답변

0

. http://localhost:1528/clientaccesspolicy.xml

WCF 서비스를 자체 호스팅하는 경우 WCF 서비스에서 clientaccesspolicy.xml을 호스팅해야합니다. 가장 쉬운 방법은 clientaccesspolicy.xml의 HTTP GET을 제공하는 별도의 서비스 계약을 추가하는 것입니다.

[ServiceContract()] 
public class PolicyRetriever 
{ 
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")] 
    public Stream GetSilverlightPolicy() 
    { 
     string result = @"<?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>"; 

     if (System.ServiceModel.Web.WebOperationContext.Current != null) 
     { 
      System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"; 
     } 

     return new MemoryStream(Encoding.UTF8.GetBytes(result)); 
    } 
} 
+0

도움이되었습니다. http://bit.ly/aPzq68에서 [urs와 다른] 정보를 좀 더 얻었습니다. – Jayesh