这似乎是一个相当普遍的问题,但我一直在搜寻,到目前为止我还没有找到适合我的解决方案。
我有一个在 IIS 上运行的 WCF Web 服务 (.svc),它在 http 上运行得很好。我已经为 http 和 https 设置了绑定。http 绑定不使用主机标头,并且可以完美运行。https绑定之前没有,但我添加了它们,它仍然不起作用。
问题在于wsdl 中的soap:address 位置。
来自 http 的 wsdl(正确):
<wsdl:service name="UserService">
<wsdl:port name="BasicHttpBinding_UserServiceSoap" binding="tns:BasicHttpBinding_UserServiceSoap">
<soap:address location="http://xxx.net/test_ryan/webservices/xx/UserService.svc"/>
</wsdl:port>
</wsdl:service>
来自 https 的 wsdl(不正确):
<wsdl:service name="UserService">
<wsdl:port name="BasicHttpBinding_UserServiceSoap" binding="tns:BasicHttpBinding_UserServiceSoap">
<soap:address location="http://colo01/test_ryan/webservices/xx/UserService.svc"/>
</wsdl:port>
</wsdl:service>
我确实拥有 ssl 证书,因此当我在浏览器中访问 xxx.net 时,我不会收到任何警告。
当我尝试在 https 中从 SoapUI 运行服务时,出现 404 错误。完全相同的请求在 http 版本中运行良好。
我已经将主机头添加到 iis7 https 绑定(我试过 www.xxx.net 和只是 xxx.net)。并运行 iisreset。当我验证时
cscript.exe /nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs get /w3svc/1/SecureBindings
我看到“:443:www.xxx.net”
该服务在 web.config 中没有任何“服务”或“绑定”元素的标准 http 上运行。行为看起来像
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</behaviors>
我尝试了许多绑定/服务的排列,但没有任何运气。包括 security="none" 和 security="TransportWithMessageCredential" 的绑定。我还尝试设置端点地址,这没有任何效果,以及 serviceMetadata.httpsGetUrl,它完全阻止了 svc/wsdl 的加载。
任何建议将不胜感激!谢谢你。