【发布时间】:2013-12-04 12:11:49
【问题描述】:
我配置了信号器诊断以帮助跟踪从客户端到服务器但未到达服务器的消息...我发现了以下异常详细信息,这几乎是我怀疑发生的事情。
SignalR.Transports.WebSocketTransport Error: 0 : OnError(08af5ad0-d63d-42a3-8e00-3c109da3be6b, System.InvalidOperationException: Buffer length exceeded
at Microsoft.AspNet.SignalR.Infrastructure.ByteBuffer.Append(Byte[] segment)
at Microsoft.AspNet.SignalR.WebSockets.WebSocketMessageReader.<ReadMessageAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.<ProcessWebSocketRequestAsync>d__8.MoveNext())
来自 packages.config;这是 SignalR 版本详情
<package id="Microsoft.AspNet.SignalR" version="1.1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.Core" version="1.1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.JS" version="1.1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.Owin" version="1.1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.SystemWeb" version="1.1.2" targetFramework="net45" />
我使用 SignalR 作为 javascript 库测试框架。 SignalR 允许服务器调用客户端 js lib 函数,这些函数涉及调用其他 web 服务或建立与其他 websocket 的连接以及处理异步提要。
我遇到了一个特定的 js lib 函数,它调用了一个 json webservice,并且响应大到超过了 signalR 内部缓冲区。
那么,最大缓冲区长度是多少?是否可配置?
如果没有; signalR 支持消息分块吗?还是我需要实施自己的解决方案?
【问题讨论】:
-
不,它现在不支持任何分块,我们也不希望通过 SignalR 发送的消息有这么大(这是一个安全问题,因为内容缓冲在内存中)。您要发送大于 4MB 的内容吗?
-
对 GetAccountStatement Web 服务调用的响应...基本上是一个非常大的帐户过帐集合。但是自从我发布了这个问题;我实现了一个简单的分块机制作为解决方法。只需一次将集合中的一项从客户端发送到服务器,然后让服务器重新构建集合。我预计我需要一个解决方法。感谢您的回复。
-
@dfowler 等一下;你说大于4MB???我严重怀疑消息响应是否会超过 4MB。您确定我使用的 SignalR 版本的最大消息大小或最大缓冲区大小为 4MB?有没有一种方法可以测量/记录邮件大小?
-
嗯,好的。这是有道理的。作为一个学术问题;我认为默认值是不可配置的?
标签: c# javascript asp.net .net signalr