Win2003上的Windows服务中的REST WCF服务托管(https)

时间:2011-06-24 04:18:32

标签: wcf rest https

我在Windows服务中自我托管REST WCF服务。该服务公开了一个返回布尔值的方法,我能够让REST Web服务在WinXp上运行。我还使用makecert生成了开发证书,并将其分配给服务侦听的端口(1443)。 Https在WinXp上运行良好。但是当我在Win2003中使用相同的,并在IE中键入URL时,它会显示“页面无法显示”。托管服务没有错误,服务侦听端口(ServiceHost.Open没有任何错误,并且成功)。是否必须在Win2003中进行此设置? Win2003是生产环境,https必须在此工作。

这是我使用的配置文件,

 <system.serviceModel>
<bindings>
  <webHttpBinding>
    <binding name="httpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="spectrumServiceBehavior" name="MyApp.TestService">
    <host>
      <baseAddresses>
        <add baseAddress="https://localhost:1443/" />
      </baseAddresses>
    </host>
    <endpoint address=""
              binding="webHttpBinding"
              bindingConfiguration ="httpBinding"
              contract="MyApp.ITestService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="spectrumServiceBehavior">
      <!-- To receive exception details in faults for debugging purposes, 
        set the value below to true.  Set to false before deployment 
        to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata httpsGetEnabled ="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 WinXP开发环境使用HTTPS,在本地创建证书并使用httpcfg分配给自定义端口。 Windows 2003上的生产环境,使用导入的证书和相同的httpcfg配置,在尝试获取服务的WSDL时提供“中断连接”。

查看Windows日志,我终于发现了这个错误:

  

活动来源:Schannel

     

尝试访问SSL服务器凭据私钥时发生致命错误。加密模块返回的错误代码是0x80090016。

我的问题是我在用户帐户存储中导入了证书,然后复制到本地存储中。通过这种方式私钥被留下...... http://support.microsoft.com/kb/939616(甚至没有警告!) 尽管在新位置打开证书,但显示存在私钥!

答案 1 :(得分:0)

我希望在Windows 2003上你必须允许应用程序监听端口(除非它以管理员身份运行),并且必须将SSL证书分配给端口 - 两者都由httpcfg.exe执行。还要检查没有防火墙阻止端口上的通信。