在同一服务上启用http和https

本文关键字:http https 启用 服务 | 更新日期: 2023-09-27 18:19:09

我正在编写一个包含单个合约的WCF服务。我希望web客户端使用http或https调用服务端点。

我的网页。配置如下:

(为简洁起见,删除了部分内容)

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IDataService" />
        <binding name="BasicHttpsBinding_IDataService" >
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="DataServiceMetadataBehavior" name="DummyService.DataService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataService"
          contract="DummyService.IDataService"/>
        <endpoint address=""
                 binding="basicHttpBinding" bindingConfiguration="BasicHttpsBinding_IDataService"
                 contract="DummyService.IDataService" name="BasicHttpsBinding_IDataService" 
                  />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DataServiceMetadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add scheme="http" binding="basicHttpBinding" />
      <add scheme="https" binding="basicHttpBinding" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>

当我尝试使用VisualStudio测试客户端测试服务时,它给出了以下错误:

无法找到与方案https匹配的基地址端点绑定BasicHttpBinding。注册基地地址[http].

在同一服务上启用http和https

端点由地址、绑定和契约组成。http://YourBaseAddress/YourApp/YourService.svchttpS://YourBaseAddress/YourApp/YourService.svc是不同的地址,具有不同的模式名称或协议以及不同的端口:默认情况下为80和443,因此您可以为服务拥有两个端点,具有相同的basicHttpBinding,前提是https具有用于SSL传输的bindingConfiguration,正如您所做的那样。错误信息是非常有用的,所以你需要去IIS(或IIS Express),以确保有一个http监听器,说https绑定后,检查网站的"编辑绑定"功能定义。这样做之后,您应该能够在Web浏览器中通过httpS://YourBaseAddress/YourApp/YourService.svc?wsdl获取WSDL。

事实上,许多Web服务/应用程序,比如来自Microsoft和Google的服务/应用程序,通过相同的主机名和路径同时支持http和https。