0

这似乎是一个相当普遍的问题,但我一直在搜寻,到目前为止我还没有找到适合我的解决方案。

我有一个在 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 的加载。

任何建议将不胜感激!谢谢你。

4

0 回答 0