【问题标题】:Silverlight WCF Service Cross Domain QuestionSilverlight WCF 服务跨域问题
【发布时间】:2010-11-24 17:48:04
【问题描述】:

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

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

【问题讨论】:

    标签: silverlight web-services service cross-domain


    【解决方案1】:

    您可能想查看如何在 Silverlight 中使用跨域策略文件的以下链接,作者是 Tim Heuer

    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 控件(假设更改并不剧烈)。

    【讨论】:

      【解决方案2】:

      是的,您需要在您的服务域 (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>
      

      【讨论】:

      • 如果我有两个 WCF 服务,这将如何工作? /ServiceA/a.svc/ServiceB/b.svc 我希望 ServiceA 对任何人、任何地方都开放,而 ServiceB 只能在我的 Intranet 上工作?跨域文件有可能吗?
      • 这可以在 Safari 上使用吗?看来 Safari 默认不支持跨域 xml-s。当然,这可能无关紧要......
      • 仅此一项不会阻止某人使用该服务,但它会确保没有 Silverlight 客户端使用它。需要其他锁定方式来防止完全访问。
      猜你喜欢
      • 2011-05-03
      • 2012-08-24
      • 1970-01-01
      • 2013-09-30
      • 2011-07-25
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多