Служба WCF в среде https - PullRequest
       8

Служба WCF в среде https

15 голосов
/ 11 января 2011

Я создал и протестировал сервис WCF, все отлично работает.

При развертывании в среде TEST и попытке открыть https://my.site/myapp/EnrollmentService.svc у меня появляется сообщение об ошибке:

Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой MetadataExchangeHttpBinding. Схемы зарегистрированных базовых адресов [HTTPS].

Интернет показал мне, что мне нужно добавить еще несколько параметров конфигурации:

http://www.codeproject.com/KB/WCF/7stepsWCF.aspx

Я добавил некоторые настройки в служебный файл web.config. Теперь это выглядит следующим образом:

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint 
      address="https://my.site/myapp/EnrollmentService.svc"
      binding="basicHttpBinding"
      bindingConfiguration="TransportSecurity"
      contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="TransportSecurity">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

На самом деле я добавил раздел «привязки» и указал его для своей конечной точки.

Но это ничего не изменило ...

Посоветуйте, пожалуйста, что мне нужно сделать. Большое спасибо!

P.S. Существуют ли различия в потреблении услуг WCF из ресурсов https и http?

Ответы [ 3 ]

21 голосов
/ 11 января 2011

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

<system.serviceModel> 
  <services>   
    <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">     
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" contract="McActivationApp.IEnrollmentService"/>     
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />   
    </service> 
  </services> 
  <behaviors>   
    <serviceBehaviors>     
      <behavior name="McActivationApp.EnrollmentServicBehavior">         
        <serviceMetadata httpsGetEnabled="True"/>       
        <serviceDebug includeExceptionDetailInFaults="False" />     
      </behavior>   
    </serviceBehaviors> 
  </behaviors> 
  <bindings>   
    <basicHttpBinding>     
      <binding name="TransportSecurity">       
        <security mode="Transport">         
          <transport clientCredentialType="None" />       
        </security>     
      </binding>   
    </basicHttpBinding> 
  </bindings> 
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />      
</system.serviceModel>
5 голосов
/ 11 января 2011

У вас есть конечная точка метаданных http, которую следует изменить на https, как показано ниже.

<serviceMetadata httpsGetEnabled="True"/>  

Кроме того, если это не требуется, рекомендуется удалить конечную точку метаданных mex и https из рабочей среды.

1 голос
/ 11 января 2011

Чтобы решить эту проблему, разрешив HTTP, необходимо добавить привязку http в IIS:

  1. Перейдите на свой сайт в IIS
  2. Нажмите «Привязки ...» на панели «Действия» справа.
  3. Нажмите «Добавить»
  4. Выберите 'http' и OK out.

В качестве альтернативы вы можете предотвратить проблему, либо удалив строку, либо изменив:

<serviceMetadata httpGetEnabled="True"/>

на:

<serviceMetadata httpsGetEnabled="True"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...