我决定将旧的Web服务迁移到名为ServiceZ.svc的WCF服务。虽然移动过程没有任何问题并且应用程序编译并且我在我的开发机器上运行其他WCF TCP服务,但我无法加载此HTTP WCF服务。无论我尝试什么,我都会收到404错误 - 有人可以查看包含的web.config部分并帮我弄清楚出了什么问题吗?谢谢!
<system.serviceModel>
<services>
<service name="ServiceZ">
<endpoint address="http://localhost/Website/ServiceZ" binding="basicHttpBinding"
name="MainHttpPoint" contract="IServiceZ" />
<endpoint address="mex" binding="mexHttpBinding" name="MexEP"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/Website/ServiceZ" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding openTimeout="0:10:00" sendTimeout="00:10:00" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
答案 0 :(得分:1)
根据您的配置方式,您可以采用以下方法:
1)在 serviceBehaviors 中,我倾向于在行为中添加以下内容:(完全可选)
<useRequestHeadersForMetaAddress>
<defaultPorts>
<add scheme="http" port="__PORT__" />
</defaultPorts>
</useRequestHeadersForMetaAddress>
这样,只需使用localhost
,localserver1
,www.webserver2.com
或fully.qualified.domain.com
的查询即可访问该服务。 (减少头痛恕我直言)。
2)端点地址相对于baseAddress。也就是说,鉴于address=""
address="mex"
用于默认绑定,并将baseAddress="http://localhost:__PORT__/Website/ServiceZ"
用于mexHttpBinding
最有可能你的WSDL问题是由于两个问题的混合(基本上,服务是说所有标记都可以在localhost上找到(由端点地址指定) - 这是当你在本地运行它时为true,但是当它在远程服务器上时就不再是这种情况了)