c# - .NET Core 是否支持 Web 套接字?抛出“System.Net.WebSockets.WebSocketException 异常

标签 c# azure websocket .net-core azure-iot-hub

我使用 .NET Core 2.1 编写了控制台应用程序。

此应用程序的职责是:连接到 Azure IoT 中心并发送数据。

我仍然遇到异常

System.Net.WebSockets.WebSocketException (0x80004005): Unable to connect to the remote server ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. at System.Net.Security.SslState.StartSendAuthResetSignal

注意:

  • 我在 Windows Embedded Standard 上运行我的代码。
  • 使用网络套接字
  • 在 Windows 10 中运行良好

这是我的引用文献

   using Microsoft.Azure.Devices.Client;
   using Microsoft.Azure.Devices.Shared;

这就是我创建连接的方式。

   string deviceConnectionString = "*******";
  _Client = DeviceClient.CreateFromConnectionString(deviceConnectionString, TransportType.Mqtt_WebSocket_Only);

网络套接字无法在 Windows 7 上运行。引用:Using WebSocket on Windows 7

所以我使用 .NET Core 2.1 来获得 Web 套接字支持,如此处所述 https://github.com/dotnet/corefx/issues/20191

我仍然遇到同样的错误!

下面是什么意思?

The remote certificate is invalid according to the validation?

更新

.NET 运行时似乎无法调用旧版 Windows Embedded Standard API 来验证 TLS 证书。我可能需要在我的代码本身中执行此操作。

一些详细信息位于https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support

另一个选项是编译 C SDK,它已经具有 TLS 证书。可以通过我们的C#代码来调用它。它将变得紧凑并且依赖性更少。

最佳答案

由于我没有足够高的代表来发表评论,因此我将提供此作为答案,尽管这更多的是建议。我遇到了类似的问题,需要从 Windows Embedded 连接到 IoT 中心。我没有达到您的要求,因为我还需要使用 Web 代理,而使用 C# SDK 和 .Net Core 无法做到这一点。

我按照你提到的第二个方向编译了 C SDK。由于我的客户没有 C 经验,因此我围绕 C SDK dll 构建了一个 C# P/Invoke 包装器。或许它会对你有一些用处。您可以在这里找到它:https://github.com/markrad/IoTPInvoke

关于c# - .NET Core 是否支持 Web 套接字?抛出“System.Net.WebSockets.WebSocketException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643821/

相关文章:

c# - WithRequired() 没有定义扩展方法

c# - Open XML SDK 2.0 for Microsoft Office 是否支持 Office 2007

azure - Fabric 不断要求使用 SSH 连接输入密码

azure - 检索 Azure 中 KQL 查询输出中的最后一个字符串

java - 返回基于 jetty 8 的 websocket 服务器上的连接数

c# - 随机获取两个数字之间的所有数字

java - C# 和 Java 中的 GUI 组件是否分别由单独的线程运行?

azure - 如何仅在 Azure 中托 pipe 域,而在其他地方托管主域?

javascript - Web 套接字的 PHP 最小工作示例

python - 使用 django channel 和 websockets