通过 WCF Rest 服务为 clientaccesspolicy.xml 提供服务,同时托管在 IIS 上

Posted

技术标签:

【中文标题】通过 WCF Rest 服务为 clientaccesspolicy.xml 提供服务,同时托管在 IIS 上【英文标题】:Serving clientaccesspolicy.xml through WCF Rest service, while hosting on IIS 【发布时间】:2011-08-12 22:54:04 【问题描述】:

我正在构建一个简单的 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 Rewrite 模块。 这是正确的方法,还是有更简单的解决方案?

【问题讨论】:

【参考方案1】:

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

政策> 政策> 跨域访问>

【讨论】:

以上是关于通过 WCF Rest 服务为 clientaccesspolicy.xml 提供服务,同时托管在 IIS 上的主要内容,如果未能解决你的问题,请参考以下文章

为 Rest Web 服务创建 WCF 代理

将 JSON 发送到 WCF Rest 服务 - 对象始终为空

无扩展 REST WCF 服务为 PUT 方法返回 http 405

通过 HTTPS 对 WCF 自托管 REST 服务的 POST 请求示例

将 WCF SOAP 和 WCF REST 服务托管为 Azure 应用服务

REST WCF 服务中的事务