如何让 WCF 服务在 SSL 上运行?

Posted

技术标签:

【中文标题】如何让 WCF 服务在 SSL 上运行?【英文标题】:How to get WCF Service Running over SSL? 【发布时间】:2011-08-14 07:01:21 【问题描述】:

我在 IIS6 中运行 C# Web 服务并试图让它通过 SSL 工作。在执行 tcpdump 时,它会将初始调用显示为 https,但其他所有调用都显示为 http。我的 SSL 证书是自签名的,并且 https 在我的网络浏览器中运行良好。我正在为客户端使用 php SoapClient。

有谁知道这是什么原因造成的?

在 wsdl 中,地址位置设置为 http。这应该是https吗?怎么改?

<wsdl:service name="Service">
<wsdl:port name="BasicHttpBinding_Service" binding="i0:BasicHttpBinding_Service">
<soap:address location="http://example.com/Service.svc"/>
</wsdl:port>
</wsdl:service>

【问题讨论】:

差别很大。以后你应该说哪个。 “.NET C# Web 服务”不明确。 【参考方案1】:

您必须将您的服务配置为使用 HTTPS:

<bindings>
  <basicHttpBinding>
    <binding name="https">
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadata">
      <serviceMetadata httpsGetEnabled="true" />  
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="..." behaviorConfiguration="metadata">
    <endpoint address="..." contract="..." binding="basicHttpBinding"
              bindingConfiguration="https" />
  </service>
</services>

这将允许仅通过 HTTPS 调用您的服务,因为没有暴露不安全的端点。 WSDL 也只能通过 HTTPS 访问,因为未启用 HTTP GET。

【讨论】:

没有人回答 OP 的另一个问题:在 wsdl 中,地址位置设置为 http。这应该是https吗?我该如何改变它?请告诉我,如果上述对配置文件的更改也将地址位置更改为 https?有必要吗? @WinFXGuy:WSDL 中的地址位置也应该是 HTTPS。如果不是,您还有一些额外的配置问题。 我错过了什么吗?请参考我的问题:***.com/questions/13502185/…

以上是关于如何让 WCF 服务在 SSL 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务在方法请求上返回 404

如何在 WCF 客户端中接受自签名 SSL 证书?

如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点

在 Android 中通过 SSL 使用 WCF 服务

无法为 ssl/tls 权限建立安全通道

WCF 服务无法为具有权限的 SSL/TLS 安全通道建立信任关系