桌面端自托管WCF服务是否支持配置启用HTTPS协议?
自托管桌面WCF REST服务支持HTTPS配置
完全可以,这类不依赖IIS、以桌面进程形式自承载的WCF Web HTTP服务原生支持HTTPS,不需要依托ASP.NET或者IIS的相关组件。你之前搜到的教程大多偏向IIS部署场景,只是因为IIS托管是WCF比较常见的部署方式,不代表自托管场景不支持这个能力。
核心配置流程
- 第一步:端口证书绑定
先把用于HTTPS的SSL证书导入到本地计算机-个人证书存储区,复制证书的指纹(Thumbprint)值,以管理员身份打开命令提示符,用netsh工具完成证书和监听端口的绑定:netsh http add sslcert ipport=0.0.0.0:[你的服务监听HTTPS端口] certhash=[证书指纹,去掉所有空格和特殊字符] appid={[自行生成的合法GUID,作为服务的唯一标识即可]}注意:如果后续需要解除绑定,只需要把上述命令里的
add替换为delete即可,appid不需要和程序集元数据严格匹配,仅作为系统层面端口绑定的归属标记使用。 - 第二步:调整WCF服务配置
将原有的HTTP绑定替换为WebHttpBinding,开启传输层安全模式,同时把服务基地址从http前缀改为https前缀,参考配置如下:<system.serviceModel> <bindings> <webHttpBinding> <binding name="RestHttpsBinding"> <security mode="Transport"> <!-- 根据自身鉴权需求选择客户端凭证类型,无鉴权就设为None --> <transport clientCredentialType="None" /> </security> </binding> </webHttpBinding> </bindings> <services> <service name="你的服务实现类全限定名"> <endpoint address="" binding="webHttpBinding" bindingConfiguration="RestHttpsBinding" behaviorConfiguration="RestEndpointBehavior" contract="你的服务契约接口全限定名" /> <endpointBehaviors> <behavior name="RestEndpointBehavior"> <webHttp /> </behavior> </endpointBehaviors> <host> <baseAddresses> <add baseAddress="https://[你的服务绑定IP/域名]:[监听端口]/" /> </baseAddresses> </host> </service> </services> </system.serviceModel> - 第三步:配置端口访问权限(非管理员运行时需要)
如果不想每次都用管理员权限启动桌面服务,可以用netsh给运行服务的用户账号分配对应URL的监听权限:netsh http add urlacl url=https://+:[监听端口]/ user=[运行服务的Windows账号名]
常见踩坑点
- 证书必须导入到本地计算机存储区,不要导入到当前用户的个人存储,否则服务运行时会因为权限不足无法读取证书,直接启动失败。
- 填写证书指纹的时候,一定要把复制出来的字符串里的隐藏空格、特殊字符全部删干净,不然会出现参数无效的报错。
- 本地开发测试如果用自签名证书,需要把证书同时导入到客户端的「受信任的根证书颁发机构」存储,否则客户端调用时会抛出证书链不受信任的错误。
内容的提问来源于stack exchange,提问作者JohnTux
相关产品推荐
相关产品推荐

