C# Windows服务通过HTTPS托管WCF

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> &

我已经根据MSDN创建并配置了SSL证书。我收到了列出的错误消息,但不确定如何将该问题中接受的答案映射到我的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>

. 另一个应用程序已向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并进行调试,则错误永远不会发生