Настройка безопасности транспортного уровня в службе webHttp WCF

StackOverflow https://stackoverflow.com/questions/1190251

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь установить безопасность транспортного уровня в службе WCF привязки webHttp. Моя текущая конфигурация выглядит следующим образом.

 <system.serviceModel>
<client>
  <endpoint binding="webHttpBinding" bindingConfiguration="webHttp"
    contract="PrimeStreamInfoServices.IService1" name="Client" />
</client>
<bindings>
<webHttpBinding>
  <binding name="webHttp" maxBufferPoolSize="1500000"  maxReceivedMessageSize="1500000"  maxBufferSize="1500000">
  <security mode="Transport">
      <transport clientCredentialType="None"

            proxyCredentialType="None"
            realm="string" />
  </security>
  </binding>

</webHttpBinding>
</bindings>
<services>

  <service name="PrimeStreamInfoServices.Service1" behaviorConfiguration="PrimeStreamInfoServices.Service1Behavior">
    <!-- Service Endpoints -->
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttp" contract="PrimeStreamInfoServices.IService1">
      <!-- 
          Upon deployment, the following identity element should be removed or replaced to reflect the 
          identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
          automatically.
      -->
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="PrimeStreamInfoServices.Service1Behavior">

      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="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>
</behaviors>
<diagnostics>

  <messageLogging logMalformedMessages="true"  logMessagesAtServiceLevel="true"
    logMessagesAtTransportLevel="true" />

</diagnostics>

однако когда я запускаю свой сервис, я получаю исключение:Не удалось найти базовый адрес, соответствующий схеме https для конечной точки с привязкой WebHttpBinding.Зарегистрированные схемы базовых адресов: [http].

Я знаю, что что-то упускаю, и я пробовал разные вещи, но не могу понять, кто-нибудь знает, что мне нужно делать?

Это было полезно?

Решение

Да — переключитесь на HTTPS с подходящим сертификатом.Транспортная безопасность в случае HTTP обеспечивается каналом SSL.Вы не можете обеспечить транспортную безопасность WS* через простой HTTPS.

Другие советы

Не обращайте внимания на мой предыдущий ответ, я думал wsHttpBinding, а не webHttpBinding.

Это адрес, который вы используете для вызова службы, который должен начинаться с https.

https://имя_машины/имя_службы

Можете ли вы попробовать добавить базовый адрес (внутри <host> элемент конфигурации вашего сервиса), который является https?Добавляете ли вы базовый адрес (или несколько) в код?

<service name="PrimeStreamInfoServices.Service1" 
         behaviorConfiguration="PrimeStreamInfoServices.Service1Behavior">
   <host>
      <baseAddresses>
         <add baseAddress="https://localhost:8080/YourService.svc" />
      </baseAddresses>
   </host>
   <!-- Service Endpoints -->
   <endpoint ......
</service>

Не уверен на 100%, работает ли это с webHttpBinding, но попробуйте!

Марк

Помните, что помимо правильной конфигурации WCF вам также необходимо настроить свойство IIS для включения SSL (включая настройку правильного сертификата X.509 для SSL).А документы есть достойная информация о том, как это сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top