Как включить HTTPS в службе WCF RESTful?

Как заставить wcf работать над https. Я хочу использовать этот wcf по https, я искал много статей, я не получил ответ, пожалуйста, помогите iam new для концепций wcf. Я хочу назвать это из ajax, jquery

 <system.serviceModel >
<services>
  <service
    name="WcfRestfulService.HttpService" behaviorConfiguration="ServiceBehaviour" >
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web"
              contract="WcfRestfulService.IHttpService">
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>

Ответ 1

Кажется, вы создаете RESTful Service с WCF, и вы действительно близки к его обеспечению.

Вот что вам нужно сделать для его защиты:

  • Добавьте новую конфигурацию WebHttpBinding, в которой установлен режим безопасности Transport.
  • Назначьте новую конфигурацию WebHttpBinding для привязки вашей конечной точки службы.
  • Убедитесь, что доступ к службе RESTful можно получить только через HTTPS, установив httpGetEnabled="false".
  • Настройте конечную точку публикации метаданных для использования HTTPS.

Эти изменения суммируются ниже в обновленном файле конфигурации (см. комментарии для измененных точек). Также обратите внимание, что ваша конечная точка обслуживания должна использовать схему HTTPS, а не HTTP.

<system.serviceModel >
  <services>
     <service name="WcfRestfulService.HttpService"
              behaviorConfiguration="ServiceBehaviour" >
         <endpoint address="" 
                   binding="webHttpBinding"
                   <!-- Add reference to secure WebHttpBinding config -->
                   bindingConfiguration="webHttpTransportSecurity"
                   behaviorConfiguration="web"
                   contract="WcfRestfulService.IHttpService" />
         <!-- Need to make sure that our metadata 
              publishing endpoint is using HTTPS as well -->
         <endpoint address="mex"
                   binding="mexHttpsBinding"
                   contract="IMetadataExchange" />
     </service>
     <!-- Add secure WebHttpBinding config -->
     <bindings>
        <webHttpBinding>
            <binding name="webHttpTransportSecurity">
                <security mode="Transport" />
            </binding>
        </webHttpBinding>
     </bindings>
  </services>
  <behaviors>
      <serviceBehaviors>
         <behavior name="ServiceBehaviour">
             <serviceMetadata httpsGetEnabled="true"
                              <!-- Make sure the service can 
                                 be accessed only via HTTPS -->
                              httpGetEnabled="false"/>
             <serviceDebug includeExceptionDetailInFaults="false"/>
         </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
         <behavior name="web">
             <webHttp/>
         </behavior>
      </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>

Ответ 2

Вам нужно установить security mode="Transport" в привязку

  <basicHttpBinding>
    <binding name="secureHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>

Подробнее о MSDN

Ответ 3

У меня была та же проблема, но мне хотелось проверить HTTP-запросы, так как мои службы являются внутренними.

Не забудьте также включить HTTPS Get Enabled. httpsGetEnabled="true"

Моя конфигурация приведена ниже в качестве примера:

   <bindings >
      <basicHttpBinding>
        <binding name="secureHttpBinding" >
          <security mode="Transport" />
        </binding>
   </bindings>
    .....
    <behaviors>
      <serviceBehaviors>
        <behavior >
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
       </serviceBehaviors>
     </behaviors>