我已根据MSDN中的these instructions创建并配置了SSL证书。我收到this question列出的错误消息,但不知道如何将该问题中接受的答案映射到我的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/。另一个应用程序已经使用HTTP.SYS注册了此URL。 ---&GT; System.Net.HttpListenerException:无法侦听前缀“https://+:54321/MyService/”,因为它与计算机上的现有注册冲突。
有人可以给我一个关于如何启用它的指针吗?
答案 0 :(得分:26)
我认为您正在连接两个不同的设置。 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/...
来匹配Visual Studios默认的urlacl for http。这可能有意义,因为请求的主机名在解密之后才可用。
答案 1 :(得分:0)
不同的明显原因,但同样的症状,对于那些找到这个帖子的人来说。
我运行了一个“始终有效”的应用程序,经过各种(未记录,因为我没想到问题)组合通过远程桌面或本地运行它,登录和注销,并用重新编译替换它,否则相同的版本与不同的版本号我得到相同“另一个应用程序已经注册了这个URL ...等等,等等。”
显然(?)注册特定于运行的实例,并在该应用程序的关闭期间持续存在。 (?)在任何情况下,旧的Windows格言,“当有疑问重启”照顾它。由于没有对应用程序本身进行任何更改,因此无需投诉。取消注册等也可能有效。这是在Windows 10下 - 我从未见过早期版本的Windows。
答案 2 :(得分:-1)
以管理员模式运行Visual Studio 关闭Visual Studio应用程序并以管理员模式重新打开它,错误消失了。在非管理员模式下运行Visual Studio时出现HTTP错误