在Windows7上托管WCF服务时需要不同的URL

本文关键字:URL 服务 Windows7 WCF | 更新日期: 2023-09-27 18:23:40

我有一个WCF服务定义如下:

<service name="MyService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/ServiceContainer" />
      </baseAddresses>
    </host>
    <endpoint address="Service" binding="webHttpBinding" contract="IService" />
</service>

我的服务执行以下合同:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "DoWork")]
    void MyMethod();
}

我使用WebServiceHost将WCF服务作为Windows服务托管。

XP上托管我调用此URI:上的操作

http://myhost:8080/ServiceContainer/DoWork

(即基本地址/URI模板)

Windows7上托管时,相同的URI失败(出现404错误)。但是,以下URI成功:

http://myhost:8080/ServiceContainer/Service/DoWork

(即基地址/端点地址/URI模板)

第二个URI也适用于XP。调用服务的客户端的操作系统没有什么区别。

这两个操作系统之间行为差异的原因是什么?UriTemplate在Windows7下的限制性更强吗?所有这些都记录在什么地方了吗?


编辑:我还运行了Windows防火墙和防病毒扫描程序(无法禁用)。然而,我在他们的日志(例如pfirewall.log)中没有看到任何迹象表明有什么东西被阻止了。

编辑2:添加以下保留URI允许在Windows 7上使用服务,但不会影响上述行为:

netsh http add http://+:8080/ user='Everyone

在Windows7上托管WCF服务时需要不同的URL

如果您的系统上有防火墙或防病毒软件,请将其关闭并检查,404错误是非常常见的。

使用此URL 进行检查

http://myhost:80/ServiceContainer/DoWork