Я сконфигурировал диагностику signalr, чтобы отслеживать сообщения с клиента на сервер, которые не доходили до сервера ... Я обнаружил следующую деталь исключения, которая в значительной степени была причиной того, что я подозревал.SignalR - Websockets - длина буфера превышена
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())
Из пакета .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 на стороне клиента, которые включают вызов других веб-сервисов или установление подключений к другим веб-сайтам и обработку асинхронных каналов.
Я столкнулся с одной конкретной функцией js lib, которая вызывает веб-службу json, и ответ достаточно велик, чтобы превышать внутренние буферы сигнала.
Итак, какова максимальная длина буфера? Это настраивается?
Если нет; поддерживает ли сигнальная поддержка сигнала? Или мне нужно будет реализовать собственное решение?
Нет, он не поддерживает какой-либо chunking today, и мы не ожидаем, что сообщения, отправленные через SignalR, будут такими большими (это проблема безопасности, поскольку вещи буферизуются в памяти). Что вы отправляете, это> 4 МБ? – davidfowl
Ответ на вызов веб-службы GetAccountStatement ... В основном очень большая коллекция проводок. Но так как я опубликовал вопрос; В качестве обходного пути я реализовал простой механизм chunking. Просто отправляя один элемент коллекции за раз от клиента к серверу и сервер перестраивает сбор. Я ожидал, что мне понадобится обходной путь. Спасибо за ответ. –
@dfowler Держать; вы сказали, что больше 4 МБ ??? Я серьезно сомневаюсь, что ответ на сообщение будет превышать 4 МБ. Вы уверены, что для версии SignalR я использую максимальный размер сообщения или максимальный размер буфера 4 МБ? Есть ли способ, который я могу измерить/записать размеры сообщений? –