C# Azure应用程序服务websocket缓冲区大小限制?
我遇到了一个问题,我的websocket连接在本地按预期运行,但在部署到azure应用程序服务时却没有。(.NET核心3.0) 我可以在本地接收任何大小的消息,但部署到azure时,消息的最大容量为4088字节 代码示例: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
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(例如,“接收异步消息时发生异常”);
}
}