【问题标题】:How to make WCF Service Use HTTPS protocol如何让 WCF 服务使用 HTTPS 协议
【发布时间】:2019-03-27 14:44:36
【问题描述】:

我有一个 WCF 服务,它可以用作休息和肥皂。 我正在尝试通过 HTTPS 协议接收请求,但无论我尝试了什么都无法接收。

我已经尝试根据这篇帖子修改 web.config 文件:

How to enable HTTPS in WCF service

我尝试了其他几种我在网上找到的类似方法。 但无论我做什么,我总是得到: “找不到与绑定 WSHttpBinding 的端点的方案 http 匹配的基地址。注册的基地址方案是 [https]。” 在调试模式下运行项目时出错。

我的配置如下:

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="SendEmailSoap" />
        <binding name="SendSMSSoap" />
        <binding name="KPSPublicSoap">
          <security mode="Transport" />
        </binding>
        <binding name="KPSPublicSoap1" />
      </basicHttpBinding>

      <webHttpBinding>
        <binding name="WebBinding">
          <security mode="None">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>

      <wsHttpBinding>
        <binding name="WsBinding">
          <security mode="None" />
        </binding>
      </wsHttpBinding>

    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="servicebehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="integrationServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="KaporaWebService.App_Code.CustomValidator, App_Code" />
          </serviceCredentials>
        </behavior>

      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="integrationServiceBehaviour" name="KaporaWebService.IntegrationService">
        <endpoint address="/ws" binding="wsHttpBinding" bindingConfiguration="WsBinding" contract="KaporaWebService.IIntegrationService" />
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="WebBinding" contract="KaporaWebService.IIntegrationService" />
      </service>
    </services>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
  </system.serviceModel>

我需要做什么才能在 WCF 上启用 HTTPS?

【问题讨论】:

    标签: c# .net web-services wcf https


    【解决方案1】:

    我们应该添加额外的使用传输层安全的服务端点,并在 IIS 站点绑定模块中添加 https 绑定。请看我的配置。

    <system.serviceModel>
        <services>
          <service behaviorConfiguration="mybehavior" name="WcfService1.Service1">
            <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webbev"></endpoint>
            <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webbev" bindingConfiguration="mybinding"></endpoint>
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint>
          </service>
        </services>
        <bindings>
          <webHttpBinding>
            <binding name="mybinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" transferMode="Streamed" sendTimeout="00:10:00" receiveTimeout="00:10:00">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
              <security mode="Transport">
                <transport clientCredentialType="None"></transport>
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="mybehavior">
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="webbev">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
    

    这里是简化的配置,因为 WCF 在 net4.5 中有新功能

      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior>
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <bindings>
          <webHttpBinding>
            <binding name="mybinding">
              <security mode="Transport">
                <transport clientCredentialType="None"></transport>
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
        <protocolMapping>
          <add binding="webHttpBinding" scheme="http"/>
          <add binding="webHttpBinding" scheme="https" bindingConfiguration="mybinding"/>
        </protocolMapping>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
    

    然后添加https地址并指定证书。
    这是官方文档,希望对你有用。
    https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-an-iis-hosted-wcf-service-with-ssl

    结果。
    如果有什么可以帮助的,请随时告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2016-01-10
      相关资源
      最近更新 更多