Настройте привязку SSL для RESTful WCF.Как? - PullRequest
4 голосов
/ 03 марта 2012

Моя текущая конфигурация выглядит так:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!--Set limit to 5 megabytes-->
        <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="5242880">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />

        </standardEndpoint>

      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

Это работает, когда у меня настроены привязки http и https для моего веб-сайта.

Я подключаюсь к сервису через https и все прекрасно работает.

Теперь я хочу полностью удалить привязку http на IIS.И я начал получать ошибку, подобную этой:

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

[InvalidOperationException: Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой WebHttpBinding.Зарегистрированные схемы базовых адресов: [https].]
System.ServiceModel.ServiceHostBase.MakeAbsoluteUri (UrilativeOrAbsoluteUri, привязка привязки, UriSchemeKeyedCollection baseAddresses) + 16582113
Service.ServiceMoDesignService_Emp_Conf_Player_Emp_setup_setup_set_setup_setup_set_set_set_setup_E, Конечная точка ServiceEndpoint) + 117
System.ServiceModel.Description.ConfigLoader.ConfigureEndpoint (StandardEndpointElement standardEndpointElement Standard, ServiceEndpointElement serviceEndpointElement, контекст ContextInformation, узел ServiceHostBase, описание ServiceDescription * omnet_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup.exe.ConfigLoader.LookupEndpoint (ServiceEndpointElement serviceEndpointElement, контекст ContextInformation, узел ServiceHostBase, описание ServiceDescription, логическое значение omitSettingEndpointAddress) + 8728167
System.ServiceModel.Web.WebServiceHost.WebHerviceBostКонечные точки (узел ServiceHost, IDictionary`2 ImpleConConcts, строка String multipleContractsErrorMessage, строка String StandardEndpointKind) + 982
System.ServiceModel.Web.WebServiceHost.OnOpening () + 311
System.ServiceModel.ChannelSmun.Omun.Omun.Ogn.Open ()+ 612
System.ServiceModel.HostingManager.ActivateService (String normalizedVirtualPath) + 255
System.ServiceModel.HostingManager.'не может быть активирован из-за исключения во время компиляции.Сообщение об исключении: Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой WebHttpBinding.Схемы зарегистрированных базовых адресов: [https] ..] System.Runtime.AsyncResult.End (результат IAsyncResult) + 901424
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End (результат IAsyncResult) + 178702 и Ex.Sec..OnAsyncHandlerCompletion (IAsyncResult ar) + 136

Я нашел несколько примеров для WCF, но REST WCF выглядит иначе на стороне конфигурации, и я хочу понять, почему это соответствует.Судя по моему конфигу - он вообще не должен работать через SSL, но работает , когда присутствует привязка https ..

Ответы [ 3 ]

3 голосов
/ 10 марта 2012

Делайте то, что говорит ошибка ... исправьте вашу привязку

 <services>
      <service name="service" behaviorConfiguration="serviceBehavior">
        <endpoint address="" binding="webHttpBinding"
              bindingConfiguration="https"
contract="IContract" behaviorConfiguration="endpointBehavior">
        </endpoint>
      </service>
    </services> 

<bindings>
 <webHttpBinding>
  <binding name="https" maxReceivedMessageSize="65536">
    <security mode="Transport" />
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />

  </binding>
 </webHttpBinding>
</bindings>
1 голос
/ 26 апреля 2017

Принятый ответ не сработал для меня, потому что мне нужно было сохранить элемент стандартных конечных точек. Я смог удалить свою http-привязку и оставить HTT-привязку только в IIS, добавив раздел <webHttpBinding> в свой файл Web.config

Не устанавливайте свойство name на <binding>, иначе это не будет работать

Соответствующая часть моего Web.config:

 <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
      <webHttpBinding>
        <binding>
          <!-- Comment out the following line if HTTP is used. If HTTPS is used, leave it enabled -->
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="false" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>
0 голосов
/ 07 марта 2012

Попробуйте это

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
  <webHttpEndpoint>
    <!--Set limit to 5 megabytes-->
    <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="5242880">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />

    </standardEndpoint>
    <security mode="Transport" />
  </webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...