无法通过 https 访问 WCF 服务
Posted
技术标签:
【中文标题】无法通过 https 访问 WCF 服务【英文标题】:Can't access WCF service through https 【发布时间】:2017-12-01 01:14:03 【问题描述】:我设置了一个由 Windows 服务托管的 WCF 应用程序。我让它正常工作,我可以通过转到http://127.0.0.1:1214 导航到它。这是配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="NetworkPrintClient.PrintWebService" behaviorConfiguration="PrintServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:1214/"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="NetworkPrintClient.IPrintWebService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="PrintServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
现在我想通过https://127.0.0.1:1214 访问它。在阅读了几篇关于这样做的文章后,我最终得到了下面的配置。但是,我不能再浏览到应用程序了。我只是在 Chrome 中收到“无法访问此站点”错误。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="NetworkPrintClient.PrintWebService" behaviorConfiguration="PrintServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="https://127.0.0.1:1214/"/>
</baseAddresses>
</host>
<endpoint address="" binding="webHttpBinding" contract="NetworkPrintClient.IPrintWebService" behaviorConfiguration="HttpBehavior" bindingConfiguration="PrintServiceHttpsBinding"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="PrintServiceBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="HttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="PrintServiceHttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
<protocolMapping>
<add binding="webHttpBinding" scheme="https"/>
</protocolMapping>
</system.serviceModel>
</configuration>
到目前为止,我使用的文章是here。我在底部做了关于制作证书并将其映射到我的 IP 和端口的部分。我还试图让它与“localhost”和我的实际 IP 地址一起使用。谁能看到我做错了什么?
【问题讨论】:
您是否尝试过使用 WCF 测试客户端访问您的服务? docs.microsoft.com/en-us/dotnet/framework/wcf/… - 我发现在某些情况下这很有帮助。另外,我建议您从上面的工作版本重新开始,然后在所有其余部分中一块一块地粘上胶水,同时确保每个步骤仍然有效。 【参考方案1】:-
您必须创建一个自托管到 localhost 的证书,您可以在 powersheel 中使用此命令行
New-SelfSignedCertificate -DnsName "localhost", "localhost" -CertStoreLocation "cert:\LocalMachine\My" 当您执行时将生成证书的指纹,并与端口相关联,例如“B80BE75765AA5739EAC63AAF67C32E5A3625FF19 "
在窗口中键入“证书”并单击管理计算机证书并将证书从个人\证书复制到受信任的根证书颁发机构\证书
将证书哈希(指纹与端口)关联 - netsh http add sslcert ipport=0.0.0.0:0 certhash=1 appid=2 certstore=MY 0 - 端口- 1 -(证书生成的指纹)2 - 555b2e5f-4877-459b-bff2-60bb25898455(GUID)
【讨论】:
非常感谢您的帮助!我相信这是我错过的第 2 步。我按照我引用的指南查看了我所做的事情,但我没有将我的证书移动到受信任的根目录。之后,一切都按预期进行。以上是关于无法通过 https 访问 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone 8.0 上的 HTTPS WCF 服务:无法进行身份验证