在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
如果您的系统上有防火墙或防病毒软件,请将其关闭并检查,404错误是非常常见的。
使用此URL 进行检查
http://myhost:80/ServiceContainer/DoWork