使用WCF(https)时WSDL超链接中的URL错误

时间:2010-09-20 11:24:18

标签: .net wcf https mex

我使用HTTPS运行我的WCF服务,它显示了Infopage,但下面的“使用以下语法测试此服务,...:”是:

svcutil.exe https://servername.group.service.com/MyService.svc?wsdl(服务器的完整地址)

如何使用正确的网址https://my.service.com/MyService.svc?wsdl(已分配的主机头),而不是显示正确的网址(<URL of the Service> + ?wsdl)?

<services>
  <service name="MyService" behaviorConfiguration="MyServer.MyServiceBehavior">
    <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBigStrings" contract="IMyService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyService.MyServiceBehavior">
      <serviceCredentials>
        <serviceCertificate findValue="my.service.com" x509FindType="FindBySubjectName"/>
      </serviceCredentials>
      <serviceMetadata httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttpBigStrings">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
      <readerQuotas maxStringContentLength="1048576" />
    </binding>
  </basicHttpBinding>
</bindings>

我已尝试将<serviceMetadata httpsGetEnabled="true"/>更改为<serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://my.service.com/MyService.svc"/>,但它只是说:“URI https://my.service.com/MyService.svc已存在注册”

2 个答案:

答案 0 :(得分:4)

您指定已设置主机标头。它是为SSL设置还是仅为Http设置。请记住,IIS UI没有为SSL设置主机标头的字段。您需要使用管理脚本(IIS 6.0)或netsh.exe来更高版本的IIS。

答案 1 :(得分:0)

你可以在下面的StackOverflow link找到一些背景知识 - 我会尝试的第一件事(他们给出几个不同的场景,更多涉及)将是在服务端点上设置Listen URI定义。当我在我的应用程序中获得WSDL地址时遇到问题时,我能够设置它来纠正它。在那种情况下,我只是试图修复该方案(我们在BIGIP背后,它正在终止SSL,因此即使服务器端的WCF认为它正在获取http,该方案仍需要https。)

<endpoint address="https://www.sslloadbalancer.com" binding="someBinding" contract="IMyServiceInterface" listenUri="http://www.servicehost.com" ...  />

我相信会为你修复WSDL