Служба Windows размещает 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/", поскольку он конфликтует с существующей регистрацией на компьютере.
Может ли кто-нибудь дать мне указатель о том, как включить это?
4 ответа
Я думаю, что вы подключаете две разные настройки. 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. Если это локальная учетная запись, используйте только имя пользователя.
Примечание: в https кажется, что подстановочный знак должен использоваться в urlacl. Мы не можем написать https://localhost:8733/...
чтобы соответствовать urlacl по умолчанию для Visual Studios для http. Это, вероятно, имеет смысл, так как запрошенное имя хоста не доступно до окончания расшифровки.
Другая очевидная причина, но тот же симптом, для других, которые находят там путь к этому посту.
Я запустил приложение, которое "всегда работало", и после различных (не зарегистрированных, так как я не ожидал проблем) комбинаций запуска его через удаленный рабочий стол или локально, входа и выхода и замены его перекомпилированной, но в остальном идентичной версией с другой номер версии у меня такой же "Другое приложение уже зарегистрировало этот URL ... бла, бла".
Очевидно (?) Регистрация была специфична для экземпляра, который работал, и сохранялась при выключениях этого приложения. (?) В любом случае старая пословица Windows, "когда сомневаешься в перезагрузке", позаботилась об этом. Без изменений в самом приложении оно запустилось без нареканий. Возможно, что отмена регистрации и т. Д. Также сработала бы. Это было под Windows 10 - я никогда не видел этого с более ранними версиями Windows.
Что касается меня, я просто не обращал внимания на то, что я не должен определять поведение и службу на одном и том же порту в app.config, как только я изменил порт URL-адреса поведения, это сработало.
Запустите Visual Studio в режиме "Запуск от имени администратора". Закройте приложение Visual Studio и снова откройте его в режиме администратора. Этого достаточно, чтобы устранить ошибку. Ошибки HTTP возникают при работе Visual Studio в режиме без прав администратора