我正在构建一个简单的HTTP文件服务器。
我有一个asp.net web应用程序,它公开了一个WCF服务(FileService.svc)。服务契约为:
[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
中搜索clientaccessppolicy文件。现在的问题是,这个请求将无法到达服务,因为FileService。SVC从url提交。
(我希望所有的文件请求都由WCF服务在HandleFileRequest()中处理,而不是任何其他机制)
我能想到的一个解决方案是使用IIS 7的URL重写模块。这是正确的方法吗?还是有更简单的解决方案?
Silverlight 使用的clientaccessppolicy .xml必须是域根目录下的 -在您的示例中,这意味着http://localhost:65000/clientaccesspolicy.xml。策略文件在每个域是唯一的,而不是每个服务。但是,您可以通过在clientaccessppolicy .xml文件中为每个服务添加一个元素来为不同的服务设置不同的策略,如下面的示例所示。
<>之前& lt; ?XML版本="1.0"编码="utf-8"?>& lt; access-policy>& lt; cross-domain-access>& lt; policy>& lt; allow-from http请求头="*"比;& lt;域uri = " * "/比;& lt;/allow-from>& lt; grant-to>= "/FileService & lt;资源路径。svc/"include-subpaths = " true "/比;& lt;/grant-to>& lt;/policy>& lt; policy>& lt; allow-from http请求头="*"比;& lt;域uri = " http://some.other.domain "/比;& lt;/allow-from>& lt; grant-to>