C# Azure应用程序服务websocket缓冲区大小限制?

C# Azure应用程序服务websocket缓冲区大小限制?,c#,.net,azure-web-app-service,asp.net-core-3.0,C#,.net,Azure Web App Service,Asp.net Core 3.0,我遇到了一个问题,我的websocket连接在本地按预期运行,但在部署到azure应用程序服务时却没有。(.NET核心3.0) 我可以在本地接收任何大小的消息,但部署到azure时,消息的最大容量为4088字节 代码示例: await Receive(socket, async (result, buffer) => { Console.WriteLine("Message size: " + result.Count); message = Encod

我遇到了一个问题,我的websocket连接在本地按预期运行,但在部署到azure应用程序服务时却没有。(.NET核心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");
    }
}

等待接收(套接字、异步(结果、缓冲区)=> { Console.WriteLine(“消息大小:+result.Count”); message=Encoding.UTF8.GetString(缓冲区,0,result.Count); }); 专用异步任务接收(WebSocket套接字、操作句柄消息) { 尝试 { var buffer=新字节[1024*16]; while(socket.State==WebSocketState.Open) { WebSocketReceiveResult结果=空; 使用(var cts=新的CancellationTokenSource(1200000)) { 结果=等待套接字。接收异步( 缓冲区:新的ArraySegment(缓冲区), 取消令牌:cts.Token ); } handleMessage(结果、缓冲区); } } 捕获(例外情况除外) { Log.Error(例如,“接收异步消息时发生异常”); } } 应用程序服务中是否有可以更改的限制

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

修复了以下问题:

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");
    }
}
private async Task Receive(WebSocket-WebSocket,Action-handleMessage)
{
尝试
{
while(webSocket.State==WebSocketState.Open)
{
var compoundBuffer=新列表();
WebSocketReceiveResult消息ReceiveResult=null;
字节[]缓冲区=新字节[4*1024];
做
{
使用(var cts=新的CancellationTokenSource(1200000))
{
messageReceiveResult=等待webSocket.ReceiveAsync(
新阵列整理(缓冲区),
cts.代币
);
}
if(messageReceiveResult.MessageType==WebSocketMessageType.Text)
{
byte[]readBytes=新字节[messageReceiveResult.Count];
复制(缓冲区、读取字节、messageReceiveResult.Count);
AddRange(readBytes);
}
}而(!messageReceiveResult.EndOfMessage);
字符串消息=Encoding.UTF8.GetString(compoundBuffer.ToArray());
handleMessage(消息);
}
}
捕获(例外情况除外)
{
Log.Error(例如,“接收异步消息时发生异常”);
}
}
修复了以下问题:

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");
    }
}
private async Task Receive(WebSocket-WebSocket,Action-handleMessage)
{
尝试
{
while(webSocket.State==WebSocketState.Open)
{
var compoundBuffer=新列表();
WebSocketReceiveResult消息ReceiveResult=null;
字节[]缓冲区=新字节[4*1024];
做
{
使用(var cts=新的CancellationTokenSource(1200000))
{
messageReceiveResult=等待webSocket.ReceiveAsync(
新阵列整理(缓冲区),
cts.代币
);
}
if(messageReceiveResult.MessageType==WebSocketMessageType.Text)
{
byte[]readBytes=新字节[messageReceiveResult.Count];
复制(缓冲区、读取字节、messageReceiveResult.Count);
AddRange(readBytes);
}
}而(!messageReceiveResult.EndOfMessage);
字符串消息=Encoding.UTF8.GetString(compoundBuffer.ToArray());
handleMessage(消息);
}
}
捕获(例外情况除外)
{
Log.Error(例如,“接收异步消息时发生异常”);
}
}