5

我有一个 silverlight 应用程序(托管在 intranet.mydomain.net)和一个 WCF 服务(webservices.mydomain.net)

我需要跨站点策略文件吗?如果是这样,只允许从 intranet.mydomain.net 访问会是什么样子?

4

2 回答 2

5

您可能想查看Tim Heuer关于“如何使用 Silverlight 使用跨域策略文件”的以下链接。

http://silverlight.net/learn/videos/all/how-to-use-cross-domain-policy-files-with-silverlight/

这是 Tim Heuer 博客中的另一个页面,您可以阅读该页面,其中也包含示例:

http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

替代文字

我会考虑编写您自己的 WCF 服务,该服务与您的 silverlight 应用程序一起使用并处理对您的外部 WCF 服务的请求。这样,您什么都不会打开,并且只允许与您的受控服务进行通信(尽管您提到的服务可能在您的控制之下)。

当您无法控制其他服务并且可能经常更改时,此方法也很有用。您可以通过自己的服务来控制如何处理,并且永远不需要更新您的 silverlight 控件(假设更改并不剧烈)。

于 2009-12-07T16:51:37.700 回答
4

是的,您需要服务域 (webservices.mydomain.net) 的根目录中的 clientaccesspolicy.xml 文件。

默认情况下,Silverlight 支持调用同一域或源站点上的 Web 服务。同域意味着调用必须使用相同的子域、协议和端口。这是出于安全原因并防止跨域伪造。

这是一个示例文件:

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://intranet.mydomain.net"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

这将只允许来自 intranet.mydomain.net 的请求。

编辑

有人问:如果我有两个 WCF 服务,这将如何工作?/ServiceA/a.svc 和 /ServiceB/b.svc 并且我希望 ServiceA 对任何地方的任何人开放,而 ServiceB 只能在我的 Intranet 上工作?

您的策略文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://*"/>
      </allow-from>
      <grant-to>
        <resource path="/ServiceA/" include-subpaths="true"/>
      </grant-to>
    </policy>

    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://intranet.mydomain.net"/>
      </allow-from>
      <grant-to>
        <resource path="/ServiceB/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
于 2009-12-07T17:42:40.940 回答