Служба Windows размещает WCF через HTTPS - PullRequest
19 голосов
/ 11 сентября 2010

Я создал и настроил SSL-сертификат в соответствии с этими инструкциями из MSDN. Я получаю сообщение об ошибке, которое содержит этот вопрос , но я не уверен, как сопоставить принятый ответ на этот вопрос с моим файлом App.config. Содержимое конфигурационного файла и сама служба работали корректно через http, только через https возникает проблема.

Мой App.config файл в данный момент:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="TransportSecurity">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="LookupServiceHost" behaviorConfiguration="serviceBehaviour">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:54321/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="ILookupService" bindingConfiguration="TransportSecurity" />
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehaviour">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Ошибка Исключение, возвращаемое в журнале событий Windows:

Служба не может быть запущена. System.ServiceModel.AddressAlreadyInUseException: HTTP не может зарегистрировать URL-адрес https://+:54321/MyService/. Другое приложение уже зарегистрировало этот URL-адрес с помощью HTTP.SYS. ---> System.Net.HttpListenerException: не удалось прослушать префикс 'https://+:54321/MyService/', поскольку он конфликтует с существующей регистрацией на компьютере.

Может кто-нибудь дать мне указатель о том, как включить это?

Ответы [ 3 ]

27 голосов
/ 11 сентября 2010

Я думаю, что вы подключаете две разные настройки.Netsh можно использовать для добавления сертификата для SSL, а также для разрешения прослушивания приложения на данном порту без запуска под учетной записью администратора.Исключение предназначено для второго параметра.Я не видел его раньше, но я предполагаю, что вы уже зарегистрировали этот порт для HTTP, поэтому давайте попробуем использовать (и зарегистрировать) HTTPS на другом порту или заменить предыдущую регистрацию.

Редактировать:

Открыть командную строку с повышенными привилегиями (от имени администратора).Сначала проверьте, назначен ли SSL-сертификат правильному порту:

netsh http show sslcert

Затем проверьте, зарегистрировано ли прослушивание HTTP на этом порту, путем вызова:

netsh http show urlacl 

Если это так, используйте следующую команду, чтобы удалить эторегистрация:

netsh http delete urlacl url=http://+:54321/MyService

Добавьте регистрацию еще раз для поддержки прослушивания по HTTPS:

netsh http add urlacl url=https://+:54321/MyService user=domain\userName

Где пользователь - это учетная запись, используемая для запуска службы Windows.Если это локальная учетная запись, используйте только userName.

Примечание: В https, похоже, что подстановочный знак должен использоваться в urlacl.Мы не можем написать https://localhost:8733/..., чтобы соответствовать urlacl по умолчанию для Visual Studios для http.Это, вероятно, имеет смысл, поскольку запрошенное имя хоста не доступно до окончания расшифровки.

0 голосов
/ 16 февраля 2018

Запустите Visual Studio в режиме «Запуск от имени администратора» Закройте приложение Visual Studio и снова откройте его в режиме администратора. Этого достаточно, чтобы устранить ошибку.Ошибки HTTP возникают при работе Visual Studio в режиме без прав администратора

0 голосов
/ 14 июля 2016

Другая очевидная причина, но тот же симптом, для тех, кто находит там путь к этому сообщению.

Я запустил приложение, которое «всегда работало», и после различных (не зарегистрированных, так как я не ожидал проблем) комбинаций запуска его через удаленный рабочий стол или локально, входа и выхода и замены его перекомпилированным, но в противном случае идентичная версия с другим номером версии, я получил тот же "Другое приложение уже зарегистрировало этот URL ... бла, бла".

Очевидно (?) Регистрация была специфической для экземпляра, который работал, и сохранялась при выключениях этого приложения. (?) В любом случае старая пословица Windows, «при сомнительной перезагрузке» позаботилась об этом. Без изменений в самом приложении оно работало без нареканий. Возможно, что отмена регистрации и т. Д. Также сработала бы. Это было под Windows 10 - я никогда не видел этого с более ранними версиями Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...