SignalR 核心:连接关闭,错误代码为 1007
SignalR Core: Connection closes with error code 1007
我正在编写一个简单的 SignalR 核心实现,其中用户将文本键入文本区域,然后显示给其他用户使用。这是通过 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 处理程序创建一个输入元素或文本区域,该处理程序通过 websocket 连接将整个内容提交给接受字符串的 SignalR 中心函数。
2) 将以下字符串复制并粘贴到输入元素中:
3) 随机输入几秒钟。
websocket 连接现在应该断开,错误代码为 1007。
有趣的是我需要比较多的北欧字符才能触发这个问题。刚开始的时候有几个是不够的。
https://github.com/dotnet/corefx/issues/29834
事实证明这是实际 websocket 实现中的一个错误。不幸的是,目前没有解决方法,所以我已经切换到 SSE 传输,直到错误得到修复。
我正在编写一个简单的 SignalR 核心实现,其中用户将文本键入文本区域,然后显示给其他用户使用。这是通过 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 处理程序创建一个输入元素或文本区域,该处理程序通过 websocket 连接将整个内容提交给接受字符串的 SignalR 中心函数。
2) 将以下字符串复制并粘贴到输入元素中:
3) 随机输入几秒钟。
websocket 连接现在应该断开,错误代码为 1007。
有趣的是我需要比较多的北欧字符才能触发这个问题。刚开始的时候有几个是不够的。
https://github.com/dotnet/corefx/issues/29834
事实证明这是实际 websocket 实现中的一个错误。不幸的是,目前没有解决方法,所以我已经切换到 SSE 传输,直到错误得到修复。