2017-01-10 3 views
1

Я ткнул десятки блогов и вопросов SO и все еще не могу заставить это работать. Я могу загрузить свою службу через HTTP, но я получаю следующую ошибку по протоколу HTTPS:Предоставление службы RESTful WCF по HTTPS

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

Я хостинг локально в IIS под сайтом SSL, который уже работает для нескольких других приложений. Вот конфигурация, которую я пытаюсь получить; Любые предложения будут ценны!

<system.serviceModel> 
    <bindings> 
    <webHttpBinding> 
     <binding name="secureWeb"> 
     <security mode="Transport"> 
      <transport clientCredentialType="Certificate" /> 
     </security> 
     </binding> 
    </webHttpBinding> 
    </bindings> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" httpHelpPageEnabled="false" httpsHelpPageEnabled="false" /> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="webBehavior"> 
     <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 

    <services> 
    <service name="Example.TestService"> 
     <endpoint binding="webHttpBinding" bindingName="secureWeb" bindingNamespace="http://example.com/services" 
       behaviorConfiguration="webBehavior" 
       contract="Example.ITestService" /> 
    </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> 
    <serviceActivations> 
     <add relativeAddress="Test.svc" service="Example.TestService" factory="Example.Common.ServiceModel.Activation.FlatWsdlServiceHostFactory" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 
+0

попробовать что-то вроде этого поста, где вы указываете httpsGetUrl: http://stackoverflow.com/questions/11127624/configuring-a-wcf-service-web-config-httpsgetenabled-httpsgeturl – smoore4

+0

@SQLDBA: Я добавил 'httpsGetUrl = "https: //localhost/ExampleService/Test.svc" на узел 'serviceMetadata', но без изменений. – zimdanen

ответ

1

В дополнение ко всему, что уже сказано, я думаю, что вы должны иметь bindingConfiguration="secureWeb" вместо bindingName="secureWeb" (например, <endpoint binding="webHttpBinding" bindingConfiguration="secureWeb"...)

+0

Oh .. my .. god. Спасибо! – zimdanen

1

Основываясь на обзоре конфигурации WCF, я думаю, что проблема может быть связана с конфигурацией метаданных службы. Конфигурация, похоже, указывает, что метаданные доступны через http и https, но конечные точки содержат только привязки для безопасного https (secureWeb).

В следующей строке измените значение httpGetEnabled с true на false.

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 

Примечание: Creating a WCF RESTful Service And Secure It Using HTTPS Over SSL блоге упоминает изменения параметров метаданных службы к концу:

<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 

Наконец, нам нужно обновить публикации метаданных конечной точки использовать HTTPS, а также:

+0

Я изменил httpGetEnabled на false, но никаких изменений. (Ну, я больше не могу получить WSDL через HTTP, но он не изменяет поведение HTTPS.) – zimdanen

+0

делает ли проблема «хостинг» службы (если да, то какая ошибка в файле трассировки WCF) или «вызов» услуги? – Seymour

+0

Хостинг службы - это дает мне ошибку, когда я вытаскиваю ее в браузере, не пытаясь позвонить. Я настрою отслеживание и посмотрю, есть ли дополнительная информация. – zimdanen