【问题标题】:How to configure WCF services to work through HTTPS without HTTP binding?如何配置 WCF 服务以在没有 HTTP 绑定的情况下通过 HTTPS 工作?
【发布时间】:2011-02-01 14:13:52
【问题描述】:

我已将我的 WCF 服务配置为使用 SSL,但它仅在 IIS 网站中存在 HTTP 绑定时才有效。当 HTTP 绑定不存在且仅存在 HTTPS 绑定时,我收到以下错误:

HttpGetEnabled 属性 ServiceMetadataBehavior 设置为 true 并且 HttpGetUrl 属性是 相对地址,但没有http 基地址。要么提供一个http 基地址或将 HttpGetUrl 设置为 绝对地址。

我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 你能解释一下这究竟是什么意思“它只有在 HTTP 绑定存在时才有效”?谢谢......我在我的 wcf 中遇到了同样的问题.. WCf 在一台服务器上工作正常,但在另一台服务器上却不行.. :(

标签: .net wcf iis web-config


【解决方案1】:

以这种方式修改您的配置:

<behaviors>
  <serviceBehaviors>
    <behavior> <!-- behavior can have name (must have name in WCF 3.x) -->
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

【讨论】:

  • 我面临同样的问题.. 但它只发生在少数服务器上.. 托管一台服务器的服务工作正常,而另一台服务器抛出问题中提到的错误.. 有什么想法吗?谢谢。
【解决方案2】:

你需要使用 mexHTTPSBinding 而不是 mexHTTPBinding

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />

【讨论】:

  • 这不是 OP 问题的原因,但如果您定义元数据端点,因为它需要在 https 上可用。
【解决方案3】:
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

由于您将 httpGetEnabled 设置为 true,因此您需要提供一个 http 地址。而HTTP绑定是一种提供地址的方式。所以如果你删除它,你需要找到另一种方式来提供地址。 以下是提供地址的两种方式。

HttpGetUrl:

 <serviceMetadata httpGetEnabled="true" httpGetUrl="[your service address]" />

HTTP 基地址:

 <host>
    <baseAddresses>
       <add baseAddress="[your service address]" />
    </baseAddresses>
 </host>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多