使用 WebSockets 的自托管 WCF 无法使用 SSL 工作

2024-03-15

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

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

WSS没有命中我的服务器代码,没有例外,甚至没有日志。 WS 经过最少的修改就可以正常工作。我用的是微软WebSockets从 nuget 简化代码:

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();

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

现在我有相同的代码,除了服务器.Open()在 ASP.net 应用程序中使用服务路线,而且它工作得很好!是的,使用 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')

In 网络配置我没有超过

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

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


好吧,最后我通过自签名证书和 COMODO 颁发的证书得到了这个工作。 我研究了 IIS 的作用并模仿它,它在操作系统级别绑定端口和主机。我基于这个结果代码项目帖子 http://www.codeproject.com/Articles/24027/SSL-with-Self-hosted-WCF-Service.

1. Install the certificate in the hosting machine. For testing proposals I am using a self-signed certificate which was generated with VS for IIS. You can use another or make it yourself with makecert.exe. Install it in Personal→Certificates. enter image description here

2. 固定插座。通过命令行作为行政人员 run:

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

Where:

  • ipport 和主机名端口 =ip、主机或域和端口是否绑定到证书。
  • 证书哈希=证书的指纹是否不含空格。
  • appid =无论什么 GUID,它都应该识别哪个应用程序正在使用它。
  • 证书存储名称 =证书的路径,在本例中 MY 表示个人→证书

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

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://域名:5650 https://domainname:5650(域名必须与步骤2中绑定的域名一致) 然后我们得到接受证书的对话框,在 Chrome 中可能需要导航到https://域名:5650/服务 https://domainname:5650/Service.

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

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

没有例外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WebSockets 的自托管 WCF 无法使用 SSL 工作 的相关文章

  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐