我确实有这个WCF服务合同:
[ServiceContract]
public interface IPolicyRetriever
{
[OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
Stream GetSilverlightPolicy();
}
使用此Web.config
部分:
<service behaviorConfiguration="policyRetrieverServiceBehavior"
name="WebService.PolicyRetriever">
<endpoint address="" binding="webHttpBinding"
behaviorConfiguration="policyRetrieverEndpointBehavior"
contract="WebService.IPolicyRetriever" />
</service>
服务器在localhost
上运行,使用Visual Studio Web主机,在端口8080
上运行,Web服务文件名为WebService.svc
。
上述代码会在GetSilverlightPolicy()
上公开http://localhost:8080/WebService.svc/clientaccesspolicy.xml
方法。
我需要的是在Web服务器的根目录而不是WebService.svc
子路径上公开文件,但我找不到实现此目的的方法。
将端点address
属性设置为/
或http://localhost:8080/
不起作用。
不向服务节点添加host
部分:
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
</baseAddresses>
</host>
有没有人找到解决方案?
答案 0 :(得分:1)
您可以实现此目的,如下所示:
将您的WCF项目设置为支持AspNetCompatiblityMode为true,如下所示:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
现在打开你的代码(实现接口的类)并在服务类上面添加以下属性:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
现在打开你的global.asax如果你有一个(否则添加一个),并在Application_Start方法中添加以下行:
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(RestService)));
您现在可以摆脱svc文件。完成上述步骤后,构建项目并部署到IIS。现在,您的Web服务的URL将是
http://localhost/VirtualDirectoryName/clientaccesspolicy.xml