如何在主机的根目录上运行带有WebGet属性的WCF服务方法

时间:2011-07-14 15:08:17

标签: .net wcf wcf-binding webget

我确实有这个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>

有没有人找到解决方案?

1 个答案:

答案 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