SignalR Core: соединение закрывается с кодом ошибки 1007 - PullRequest
0 голосов
/ 18 мая 2018

Я пишу простую реализацию SignalR Core, в которой пользователь вводит текст в текстовую область, которая затем отображается для другого использования.Это делается путем передачи строки содержимого через концентратор SignalR.Это работает отлично в течение пары минут, но затем соединение внезапно закрывается с сообщением:

'Error: Websocket closed with status code: 1007 ()'.

При поиске кода ошибки кажется, что проблема заключается в том, что строка не закодирована в формате UTF-8.Это на самом деле не имеет смысла для меня, так как я посылаю обычную строку javascript в функцию-концентратор, принимающую строку.Конечно, это пример из учебника простой реализации SignalR?

Я пытался кодировать строку как UTF-8, с помощью этого трюка, который я нашел:

function forceUnicodeEncoding(string) {
  return unescape(encodeURIComponent(string));
}

Но это не такt исправить проблему.

Моя хаб-функция выглядит так:

public async Task SendContent(string text)
{
    _contentString = text;
    await Clients.Others.SendAsync("ReceiveContent", _contentString);
}

_contentString - статический кеш введенного содержимого.

Я называю это так

    this.hubConnection.invoke('SendContent', contentString)

Где "contentString" - это значение event.target из функции TextArea onChange.

Я что-то здесь упускаю?

Редактировать: похоже, это связано сиспользование нестандартных символов, таких как северные буквы æøå

Шаги для воспроизведения, для людей без северных клавиатур

1) Создайте элемент ввода или текстовое поле сОбработчик onChange, который передает весь контент в функцию-концентратор SignalR, которая принимает строку через соединение через веб-сокет.

2) Скопируйте и вставьте следующую строку в элемент ввода: "ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ "

3) Введите случайное дерьмо на несколько секунд.

Соединение с веб-сокетом должно отключиться с кодом ошибки 1007.

Самое смешное, что мне нужноОтносительно большое количество нордических символов, чтобы вызвать проблему.В начале этого мало, только несколько.

1 Ответ

0 голосов
/ 22 мая 2018

https://github.com/dotnet/corefx/issues/29834

Это оказалось ошибкой в ​​реальной реализации websocket.К сожалению, пока нет обходного пути, поэтому я переключился на транспорт SSE, пока ошибка не будет исправлена.

...