【问题标题】:Changing wcf service from Http to https makes it unreachable将 wcf 服务从 Http 更改为 https 使其无法访问
【发布时间】:2014-09-04 12:27:58
【问题描述】:

由于 Firefox 中的“混合内容阻止”问题,我不得不将在控制台应用程序上运行的 wcf 服务更改为 https。

这是配置:

<services>
  <service name="ServiceHost.Services.BiometricCaptureService" behaviorConfiguration="Default">
    <endpoint address="rest" behaviorConfiguration="CorsBehavior" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="ServiceHost.IServices.IBiometricCaptureService"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="https://localhost:8502/biometrics/biometricscaptureservice.svc"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="CorsBehavior">
      <webHttp/>
      <crossOriginResourceSharingBehavior/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<extensions>
  <behaviorExtensions>
    <add name="crossOriginResourceSharingBehavior" type="ServiceHost.Utility.CORSBehaviorExtensionElement, ServiceHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </behaviorExtensions>
</extensions>
<bindings>
  <webHttpBinding>
    <binding name="httpsBinding" maxReceivedMessageSize="2147483647">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
      </security>
      <readerQuotas maxStringContentLength="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

使用此配置启动服务不会引发任何错误,但我无法再访问端点。

我能得到的唯一错误是:“无法从传输连接读取数据:现有连接被远程主机强行关闭。”

任何人都可以看到这有什么问题吗?

【问题讨论】:

  • 尝试在您的控制台应用程序中添加System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) =&gt; true);

标签: c# wcf


【解决方案1】:

我看不到您的服务将如何找到加密证书。

你应该有这样的东西:

<behaviors>
 <serviceBehaviors>
   <behavior name="mySvcBehavior">
      <serviceCredentials>
        <serviceCertificate findValue="xxxxxx" x509FindType="FindByThumbprint" />
      </serviceCredentials>
   </behavior>
 </serviceBehaviors>
</behaviors>

这是一个相当不错的在 WCF 站点上设置 HTTPS 的分步指南。 http://robbincremers.me/2011/12/27/wcf-transport-security-and-client-certificate-authentication-with-self-signed-certificates/

【讨论】:

  • 有什么方法可以避免安装证书并仍然可以使用 HTTPS?
  • 不...您需要证书。只是将您的安全性更改为“传输”并将您的端点更改为“HTTPS”并不意味着没有证书和让服务找到证书的编程。但是即使您使用带有证书的 HTTPS,如果证书是自生成的,Firefox 仍然会抱怨该证书不是从官方 CA(Cert authority)发布的。您可能必须将证书添加到受信任的列表中。
猜你喜欢
  • 1970-01-01
  • 2019-02-08
  • 2017-12-01
  • 1970-01-01
  • 2020-03-08
  • 2014-12-20
  • 1970-01-01
  • 2011-04-30
  • 2016-01-01
相关资源
最近更新 更多