Поддерживается ли веб-сокет в .NET Core?выбрасывание исключения System.Net.WebSockets.WebSocketException - PullRequest
0 голосов
/ 06 декабря 2018

Я написал консольное приложение, используя .NET Core 2.1.

Ответственность за это приложение: Подключитесь к Azure IoT hub и отправьте данные.

Я все еще получаю исключение

System.Net.WebSockets.WebSocketException (0x80004005): Невозможно подключиться к удаленному серверу ---> System.Net.Http.HttpRequestException: Невозможно установить соединение SSL, см. Внутреннее исключение.---> System.Security.Authentication.AuthenticationException: удаленный сертификат недействителен в соответствии с процедурой проверки.at System.Net.Security.SslState.StartSendAuthResetSignal

Примечание :

  • Мой код выполняется на Windows Embedded Standard.
  • Использование веб-сокетов
  • Прекрасно работает в Windows 10

Вот мои ссылки на nuget

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

Вот как я создаюподключение.

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

веб-сокеты не будут работать в Windows 7 .Справка: Использование WebSocket в Windows 7

Поэтому я использую .NET Core 2.1 для получения поддержки веб-сокетов, как упомянуто здесь https://github.com/dotnet/corefx/issues/20191

Тем не менее я получаю то же самоеошибка!

что означает следующее?

Удаленный сертификат недействителен в соответствии с проверкой?

Обновление

Кажется, среда выполнения .NET не может вызвать более старые API Windows Embedded Standard для проверки сертификата для TLS.Мне может понадобиться сделать это в самом коде.

Некоторые подробности находятся по адресу https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support

Другой вариант - скомпилировать C SDK, который уже имеет этот сертификат для TLS.Это можно вызвать через наш код C #.Он будет компактным и менее зависимым.

1 Ответ

0 голосов
/ 29 декабря 2018

Поскольку у меня недостаточно высокого представителя, чтобы комментировать, я приведу это в качестве ответа, хотя это скорее предложение.Я столкнулся с подобной проблемой, и мне нужно было подключиться к концентратору IoT из Windows Embedded.Я не зашел так далеко, как вы, поскольку мне также нужно было использовать веб-прокси, и не было никакого способа сделать это с C # SDK и .Net Core.

Я пошел во втором направлении, которое вы упомянулии скомпилировал C SDK.Поскольку у моего клиента не было опыта работы с C, я создал оболочку C # P / Invoke вокруг dll C SDK.Возможно, это будет вам полезно.Вы можете найти его здесь: https://github.com/markrad/IoTPInvoke

...