生成的wsdl将机器位置用于ssl - 无论主机头是什么

时间:2013-03-13 19:03:26

标签: .net wcf

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

我在IIS上运行的WCF Web服务(.svc)可以正常工作。我已经为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”

该服务正在使用标准http,而web.config中没有任何“services”或“bindings”元素。行为看起来像

   <behaviors>      
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />   
          <useRequestHeadersForMetadataAddress />       
        </behavior>
      </serviceBehaviors>
    </behaviors>

我尝试了许多绑定/服务的排列,没有任何运气。包括带有security =“none”和security =“TransportWithMessageCredential”的绑定。我也尝试设置无效的端点地址和serviceMetadata.httpsGetUrl,它可以防止加载svc / wsdl。

任何建议都将非常感谢!谢谢。

0 个答案:

没有答案