SignalR Core:连接关闭,错误代码为1007

时间:2018-05-18 10:37:18

标签: signalr-hub signalr.client asp.net-core-signalr

我正在编写一个简单的SignalR Core实现,其中用户将文本键入textarea,然后显示给另一个用户。这是通过SignalR集线器传输内容字符串来完成的。这可以正常工作几分钟,但随后连接突然关闭并显示消息:

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

查找错误代码,似乎问题是该字符串不是UTF-8编码的。这对我来说没有多大意义,因为我正在向接受字符串的集线器函数发送一个普通的javascript字符串。当然,这是一个简单的SignalR实现的教科书示例?

我尝试通过这个技巧将字符串编码为UTF-8:

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

但这并不能解决问题。

我的集线器功能如下所示:

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

_contentString是输入内容的静态缓存。

我称之为

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

其中“contentString”是TextArea onChange函数中event.target的值。

我在这里错过了什么吗?

编辑:这似乎与使用非标准字符有关,例如北欧字母æøå

为没有北欧键盘的人重现的步骤

1)使用onChange处理程序创建一个输入元素或textarea,该处理程序通过websocket连接将整个内容提交给一个接受字符串的SignalR中心函数。

2)复制并粘贴以下字符串到输入元件: “æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ”

3)输入随机废话几秒钟。

现在,websocket连接应该与错误代码1007断开连接。

有趣的是,我需要相对大量的北欧角色来触发问题。只有一些人在开始时这还不够。

1 个答案:

答案 0 :(得分:0)

formName()

这实际上是websocket实现中的一个错误。不幸的是,目前还没有解决方法,所以我已经切换到SSE传输,直到错误得到解决。