跨域策略

时间:2010-05-17 11:30:59

标签: wcf silverlight

我正在使用一个使用WCF服务的Silvelright应用程序,我已经在IIS的wwwroot以及应用程序文件夹中放置了一个跨域和clientaccesspolicy xml!

当客户端与服务进行通信时,它会抛出一个错误说;

尝试向URI“http://localhost:1528/MyService.svc”发出请求时发生错误。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者才能发布......

请帮忙! 感谢

1 个答案:

答案 0 :(得分:0)

clientaccesspolicy.xml需要与您的服务位于同一端口。它需要位于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));
    }
}