首页 > 解决方案 > 提供的 URI 方案“http”无效;预期的“https”。参数名称

问题描述

我经历了一些以前的问题,但我认为我错过了某个地方,因为 WCF 对我来说是全新的。

WCF 服务应用程序中的 web.config

  <service behaviorConfiguration="BehaviourName" name="ProjectName.ServiceName">
    <endpoint address="" binding="basicHttpBinding" contract="ProjectName.IServiceName">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="https://aaa.bbbbbb.com/IISDeployedFolderName"/>
      </baseAddresses>
    </host>
  </service>
  ....................
  .....................

  <behavior name="BehaviourName">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="false" />
  </behavior>
  ............................
  ..........................
  <basicHttpBinding>
    <binding name="secureHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Certificate" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
  ..........................
  .........................
  <protocolMapping>
    <add binding="basicHttpBinding" scheme="https" />
  </protocolMapping>
  ............................
  ..............................

在 MVC 应用程序中,其他应用程序正在使用上述代码服务。

使用默认设置添加服务引用并使用 http 自动生成端点地址,如果我将其更改为 https,则会出错。

标签: wcfweb-configwcf-endpoint

解决方案


在 WCF 中,我们应该为协议配置一个额外的服务端点HTTPS,这需要传输层安全模式。

    <services>
      <service name="WcfService1.Service1">
        <!--please pay attention to that apply the binding configuration by means of bindingConfiguration property.-->
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode ="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
</bindings>

以下配置同时支持 HTTP 协议和 HTTPS 协议。

  <system.serviceModel>
    <services>
      <service name="WcfService1.Service1">
        <!--please pay attention to that apply the binding configuration by means of bindingConfiguration property.-->
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode ="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

我们还可以使用ProtocolMappingsection 来简化配置。以下配置同时支持 HTTP 和 HTTPS 协议。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <protocolMapping>
      <add binding="basicHttpBinding" scheme="http"/>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>
  </system.serviceModel>

官方文件。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/simplified-configuration
如果有什么我可以帮忙的,请随时告诉我。


推荐阅读