Подтвердить что ты не робот

Служба Windows Service размещала WCF поверх HTTPS

Я создал и настроил 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/', поскольку он конфликтует с существующей регистрацией на машине.

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

4b9b3361

Ответ 1

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

Edit:

Откройте командную строку с повышенными привилегиями (как Admin). Сначала проверьте, назначен ли сертификат 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. Если в локальной учетной записи используется только имя пользователя.

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

Ответ 2

По-разному кажущаяся причина, но тот же самый симптом, для других, кто находит там путь к этому сообщению.

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

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