我使用 .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/