0

我正在构建一个简单的 HTTP 文件服务器。
我有一个公开 WCF 服务 (FileService.svc) 的 asp.net Web 应用程序。
服务合同为:

[OperationContract]
[WebGet(UriTemplate = "/*")]
Stream HandleFileRequest();

服务实现非常简单,基本上我使用:

WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri

获取要返回的文件的路径(需要一点解析来提取它)。

例如,当在 IIS 上本地托管应用程序时,我可以从以下位置请求文件: http://localhost:65000/FileService.svc/someFolder1/someFolder2/someFile1.jpg

当从silverlight应用程序内部发出此请求时,问题就开始了。Silverlight 在http://localhost:65000/clientaccesspolicy.xml
中搜索 clientaccesspolicy 文件 问题是现在,此请求将无法到达服务,因为 FileService.svc 从 url 中省略。

(我希望所有文件请求都由 HandleFileRequest() 中的 WCF 服务处理,而不是任何其他机制。)

我能想到的一种解决方案是使用IIS 7的URL 重写
模块。 这是正确的方法,还是有更简单的解决方案?

4

1 回答 1

0

Silverlight 使用的 clientaccesspolicy.xml必须位于域根目录 - 在您的示例中,这意味着http://localhost:65000/clientaccesspolicy.xml。每个域的策略文件是唯一的,而不是每个服务。但是,您可以通过在 clientaccesspolicy.xml 文件中为每个服务添加一个元素来为不同的服务设置不同的策略,如下例所示。

<?xml 版本="1.0" 编码="utf-8"?>
<访问策略>
  <跨域访问>
    <政策>
      <allow-from http-request-headers="*">
        <域 uri="*"/>
      </allow-from>
      <授予>
        <resource path="/FileService.svc/" include-subpaths="true"/>
      </grant-to>
    </政策>
    <政策>
      <allow-from http-request-headers="*">
        <domain uri="http://some.other.domain"/>
      </allow-from>
      <授予>
        <resource path="/AnotherService/" include-subpaths="true"/>
      </grant-to>
    </政策>
  </跨域访问>
</access-policy>
于 2011-05-13T06:13:40.483 回答