我在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>
有什么想法吗?
答案 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执行。还要检查没有防火墙阻止端口上的通信。