【问题标题】:Azure app service websocket buffer buffer size limits?Azure 应用服务 websocket 缓冲区缓冲区大小限制?
【发布时间】:2021-02-25 10:26:35
【问题描述】:

我遇到了一个问题,我的 websocket 连接在本地按预期运行,但在部署到 azure 应用服务时却没有。 (.NET Core 3.0)

我能够在本地接收任何大小的消息,但部署到 azure 时消息的上限为 4088 字节。

代码示例:

await Receive(socket, async (result, buffer) =>
{
    Console.WriteLine("Message size: " + result.Count);
    message = Encoding.UTF8.GetString(buffer, 0, result.Count);
});

private async Task Receive(WebSocket socket, Action<WebSocketReceiveResult, byte[]> handleMessage)
{
    try
    {
        var buffer = new byte[1024 * 16];
        while (socket.State == WebSocketState.Open)
        {
            WebSocketReceiveResult result = null; 
            using (var cts = new CancellationTokenSource(1200000))
            {
                result = await socket.ReceiveAsync(
                    buffer: new ArraySegment<byte>(buffer),
                    cancellationToken: cts.Token
                    );
            }
            handleMessage(result, buffer);
        }
    }
    catch (Exception ex)
    {
        Log.Error(ex, "Exception occured when receiving message async");
    }
}

应用服务中是否有可以更改的限制?

我已经尝试设置一个远程客户端,将消息发送到 azure 应用服务和我的本地环境。这只是 azure 应用服务的问题。

【问题讨论】:

    标签: c# .net azure-web-app-service asp.net-core-3.0


    【解决方案1】:

    固定为:

    private async Task Receive(WebSocket webSocket, Action<string> handleMessage)
    {
        try
        {
            while (webSocket.State == WebSocketState.Open)
            {
                var compoundBuffer = new List<byte>();
                WebSocketReceiveResult messageReceiveResult = null;
                byte[] buffer = new byte[4 * 1024];
    
                do
                {
                    using (var cts = new CancellationTokenSource(1200000))
                    {
                        messageReceiveResult = await webSocket.ReceiveAsync(
                        new ArraySegment<byte>(buffer),
                        cts.Token
                        );
                    }
    
                    if (messageReceiveResult.MessageType == WebSocketMessageType.Text)
                    {
                        byte[] readBytes = new byte[messageReceiveResult.Count];
                        Array.Copy(buffer, readBytes, messageReceiveResult.Count);
                        compoundBuffer.AddRange(readBytes);
                    }
                } while (!messageReceiveResult.EndOfMessage);
    
                string message = Encoding.UTF8.GetString(compoundBuffer.ToArray());
                handleMessage(message);
            }
        }
        catch (Exception ex)
        {
            Log.Error(ex, "Exception occured when receiving message async");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多