C# Windows服务通过HTTPS托管WCF
我已经根据MSDN创建并配置了SSL证书。我收到了列出的错误消息,但不确定如何将该问题中接受的答案映射到我的App.config文件。配置文件的内容,以及服务本身在http上正常工作,问题就发生在https上 我的C# Windows服务通过HTTPS托管WCF,c#,windows-services,wcf,C#,Windows Services,Wcf,我已经根据MSDN创建并配置了SSL证书。我收到了列出的错误消息,但不确定如何将该问题中接受的答案映射到我的App.config文件。配置文件的内容,以及服务本身在http上正常工作,问题就发生在https上 我的App.config文件当前为: <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> &
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>
. 另一个应用程序已向HTTP.SYS注册此URL。-->System.Net.HttpListenerException:未能侦听前缀“”,因为它与计算机上的现有注册冲突
有人能给我一个如何启用此功能的指针吗?我想您正在连接两个不同的设置。Netsh可用于为SSL添加证书,但也允许应用程序在给定端口上侦听,而无需在admin帐户下运行。异常针对第二个设置。我以前没有见过它,但我假设您已经为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/...
以匹配Visual Studio默认的http URL ACL。这可能是有道理的,因为请求的主机名在解密后才可用。不同的表面原因,但对于找到此帖子方法的其他人来说,症状相同
我运行了一个“一直工作”的应用程序,在通过远程桌面或本地运行它、登录和注销,以及用重新编译但其他相同版本和不同版本号替换它的各种组合(由于我没有预料到问题而未登录)之后,我得到了相同的结果“另一个应用程序已注册此URL…诸如此类”
显然(?)注册是特定于运行的实例的,并且在该应用程序关闭期间保持不变。(?)在任何情况下,旧的Windows格言是“当有疑问时重新启动”“我处理好了。在应用程序本身没有任何更改的情况下,它就可以毫无怨言地运行了。也许取消注册等也会起作用。这是在Windows 10下实现的-我从未在早期版本的Windows中看到过 以管理员身份运行Visual Studio
关闭VisualStudio应用程序,然后在管理员模式下重新打开它,这样错误就消失了。在非管理模式下运行Visual studio时会发生HTTP错误因为这是.NET,所以您没有收到错误消息,而是收到异常。请发布完整的例外情况。@John,撇开学究不谈,我确实声明我收到了与链接帖子相同的消息(IMO)。也就是说,我已经在我的问题中添加了具体的细节。你能指出我应该对我的.config文件/netsh注册进行哪些更改才能做到这一点吗?确切地说,我注册了错误的端口。把自己投入到最深处显然不是处理WCF和HTTPS的最简单方法,尤其是在喝了一两杯酒之后!)以管理员身份运行VisualStudio几乎从来都不是正确的答案。以管理员身份运行任何东西几乎都不是正确的答案。公认的答案详细说明了正确的方法。如果您以管理员身份运行Visual Studio,则您的代码可能需要以管理员身份在生产环境中运行-这不是您应该或不想看到的地方,当我没有在管理模式下调试项目时,总是会出现此错误,一旦我关闭解决方案并在管理模式下打开VS并进行调试,则错误永远不会发生