C# 信号器-Websockets-超出缓冲区长度

C# 信号器-Websockets-超出缓冲区长度,c#,javascript,asp.net,.net,signalr,C#,Javascript,Asp.net,.net,Signalr,我将signalr diagnostics配置为帮助跟踪从客户端到服务器的未到达服务器的消息。。。我发现了下面的异常细节,这几乎就是我所怀疑的 SignalR.Transports.WebSocketTransport Error: 0 : OnError(08af5ad0-d63d-42a3-8e00-3c109da3be6b, System.InvalidOperationException: Buffer length exceeded at Microsoft.AspNet

我将signalr diagnostics配置为帮助跟踪从客户端到服务器的未到达服务器的消息。。。我发现了下面的异常细节,这几乎就是我所怀疑的

    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())
Signal.Transports.WebSocketTransport错误:0:OneError(08af5ad0-d63d-42a3-8e00-3c109da3be6b,System.InvalidOperationException:超出缓冲区长度
位于Microsoft.AspNet.signal.Infrastructure.ByteBuffer.Append(字节[]段)
在Microsoft.AspNet.signal.WebSockets.WebSocketMessageReader.d_u0.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
在Microsoft.AspNet.signal.WebSockets.WebSocketHandler.d_u8.MoveNext()中
从packages.config;这是信号机版本的详细信息

  <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" />

我使用signar作为javascript库测试框架。signar允许服务器调用客户端js-lib函数,这些函数涉及调用其他webservices或建立到其他websocket的连接以及处理异步提要

我遇到了一个调用json Web服务的特定js lib函数,该函数的响应足够大,足以超过signalR内部缓冲区

那么,最大缓冲区长度是多少?它是可配置的吗


若否,;信号器是否支持消息分块?或者我需要实施我自己的解决方案吗?

我怀疑有必要采取一种变通办法,因此我实施了一种相当基本的分块机制,以防止消息大小超过缓冲区限制。

这是一个老问题,但这篇文章(没有解决我的问题)在我找到一个可行的解决方案之前,来自谷歌的debths:

下面简要介绍一下是什么帮助了我从上面的链接中得到答案

您可以在邮件中添加一行,使邮件大小“无限” 通过将MaxIncomingWebSocketMessageSize设置为null,启动.cs:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
    app.MapSignalR();
    GlobalHost.Configuration.MaxIncomingWebSocketMessageSize = null;
    }
}

在我的例子中,导致缓冲区长度超出错误的消息刚刚超过64K,因此我只将MaxIncomingWebSocketMessageSize增加了一倍,达到128K。

不,它今天不支持任何分块,我们也不希望通过信号器发送的消息有这么大(这是一个安全问题,因为东西都在内存中缓冲)。您正在发送大于4MB的内容?对GetAccountStatement web服务调用的响应。。。基本上是一个非常大的帐户过账集合。但是自从我发布了这个问题;我实现了一个简单的分块机制作为解决方法。只需将集合的一项从客户端发送到服务器,然后让服务器重新生成集合。我原以为我需要一个变通办法。谢谢您的回复。@dfowler,请稍候;你说的大于4MB???我严重怀疑消息响应是否会超过4MB。您确定我使用的SignalR版本的最大消息大小或最大缓冲区大小为4MB吗?是否有一种方法可以测量/记录邮件大小?默认情况下它实际上是64K:啊,好的。这是有道理的。作为一个学术问题;我认为默认值是不可配置的?