1

我确实有这个 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 托管,8080Web 服务文件名为WebService.svc.

上面的代码将使该GetSilverlightPolicy()方法暴露在http://localhost:8080/WebService.svc/clientaccesspolicy.xml.

我需要的是在网络服务器的根目录而不是WebService.svc子路径上公开文件,但我找不到完成此任务的方法。

将端点address属性设置为/http://localhost:8080/不起作用。

既不向host服务节点添加部分:

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8080/"/>
  </baseAddresses>
</host>

有没有人找到解决方案?

4

1 回答 1

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 
于 2011-11-22T16:30:28.160 回答