gpt4 book ai didi

c# - 使用 WebSockets 的自托管 WCF 无法使用 SSL

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:19 26 4
gpt4 key购买 nike

我在控制台应用程序中有这段代码。我正在尝试从开发工具 chrome 进行连接,但出现此错误,尽管问题肯定在 WCF 端:

WebSocket connection to 'wss://127.0.0.1:5650/Echo' failed: Error in connection establishment: net::ERR_CONNECTION_RESET

WSS 没有命中我的服务器代码,没有异常,甚至没有日志。修改最少的 WS 工作正常。我使用 nuget 中的 Microsoft.WebSockets 来简化代码:

WebSocketHost server = new WebSocketHost(typeof(EchoWSService), new Uri("https://127.0.0.1:5650/Echo"));
var bindingSsl = WebSocketHost.CreateWebSocketBinding(true);
server.AddWebSocketEndpoint(bindingSsl);
server.Open();

我已经尝试过自定义证书验证器,但正如我所说,它没有命中我的代码。

现在我在使用 ServiceRoute 的 ASP.net 应用程序中有相同的代码,除了 server.Open() 之外,它工作得很好!是的,使用 SSL 和 VS 为 IIS Express 生成的自签名证书:

RouteTable.Routes.Add(new ServiceRoute("Echo", new TRWebSocketServiceFactory(), typeof(EchoWSService)));

浏览器端只有:

var ws = new WebSocket('wss://127.0.0.1:5650/Echo')

web.config 我没有超过

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

那么为什么我的自托管 WCF 不能在一个简单的控制台应用程序中运行呢?

最佳答案

好吧,最后我使用自签名证书和 COMODO 颁发的证书完成了这项工作。我调查了 IIS 的作用并模仿它,它在操作系统级别绑定(bind)端口和主机。我将此结果基于此 codeproject post .

<强>1。在主机中安装证书。对于测试提案,我使用的是使用 VS 为 IIS 生成的自签名证书。您可以使用另一个或使用 makecert.exe 自己制作。在个人→证书中安装它。 enter image description here

<强>2。保护套接字。以管理员身份通过命令行运行:

netsh http add sslcert ipport=0.0.0.0:5650 certhash=xxxxxxx.. appid={xxxx-xxx..} certstorename=MY
netsh http add sslcert hostnameport=domainnamne:5650 certhash=xxxxxxx.. appid={xxxx-xxx..} certstorename=MY

地点:

  • ipport and hostnameport =是证书绑定(bind)的ip、host或domain和port。
  • certhash = 是证书的指纹,没有空格。
  • appid = 是任何 GUID,它应该识别哪个应用程序正在使用它。
  • certstorename = 证书的路径,在本例中 MY 表示个人→证书

在 Windows Server 2008 中,我们可以使用 *httpcfg.exe*** 进行相同的提议。一旦绑定(bind)成功,我们可以通过运行来查看:

netsh http show sslcert

我们将得到:

Hostname:port                : domainname:5650
Certificate Hash : xxxxxxx..
Application ID : {xxxx-xxx..}
Certificate Store Name : MY
Verify Client Certificate Revocation : Enabled

<强>3。在浏览器端接受证书。 如果我们有有效的可信证书,则不需要此步骤

为了使浏览器接受证书,请导航至 https://domainname:5650 (域名必须与您在步骤 2 中绑定(bind)的域名匹配)然后我们得到接受证书的对话框,在 chrome 中可能需要导航到 https://domainname:5650/Service .

enter image description here

瞧,在控制台中你可以尝试:

ws = new WebSocket('wss://domainname:5650/Service');

没有异常(exception)。

enter image description here

关于c# - 使用 WebSockets 的自托管 WCF 无法使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com