1

次のように、ハブでメソッドを呼び出す .NET クライアントがあります。

var competition = hubProxy.Invoke<Competition>("GetCompetition", "Queen's Final 2013").Result;

Windows 8 でデバッグすると、次のエラーが発生します。

20:23:25.0926734 - null - ChangeState(Disconnected, Connecting)
20:23:25.3748631 - ... - WS: ws://localhost:59570/signalr/connect?transport=webSockets&connectionToken=-Tp4LiB-1w8TjNuw0ilbeMFjw_B8Vl1c31Oni72nbXazWo6qHBSJCRFJU6YD4wJo9dYZ_mb0vNez2hD8JllF0SUXzkhrN4ejcuO1_gBrFrcsK02xJLBnV_z7d774EFlw0&connectionData=[{"Name":"QueensFinalHub"}]
20:23:25.3968761 - ... - ChangeState(Connecting, Connected)
20:23:34.2938036 - ... - WS: OnMessage({})
20:23:35.5546436 - ... - OnError(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())
20:23:35.5576456 - ... - WS: OnClose(False)
20:23:35.5596469 - ... - ChangeState(Connected, Reconnecting)
20:23:35.5616483 - ... - WS: ws://localhost:59570/signalr/reconnect?transport=webSockets&connectionToken=-Tp4LiB-1w8TjNuw0ilbeMFjw_B8Vl1c31Oni72nbXazWo6qHBSJCRFJU6YD4wJo9dYZ_mb0vNez2hD8JllF0SUXzkhrN4ejcuO1_gBrFrcsK02xJLBnV_z7d774EFlw0&connectionData=[{"Name":"QueensFinalHub"}]
20:23:35.5766587 - ... - ChangeState(Reconnecting, Connected)
20:23:44.3054789 - ... - WS: OnMessage({})

応答データは非常に大きいですが、Windows 7 でデバッグするとこのエラーは発生しません (接続でサーバー サイド イベントが使用されていると思われます)。

何が原因でしょうか?

4

1 に答える 1

4

SignalR は、Web サービス フレームワークではなく、リアルタイム メッセージング フレームワークになろうとしているため、メッセージ サイズに適切な既定の制限があります。デフォルトは 64kbWebSocketHandler::MaxIncomingMessageSize、これは読み取り専用のプロパティです。

基本的な HTTP GET 要求であるべきものに SignalR を使用しようとしているようです。代わりに、この種のデータ交換のために ASP.NET WebAPI Web サービスに対して AJAX を使用することを検討しましたか?

于 2013-07-01T23:57:34.403 に答える