c#使用ClientWebSocket和服务端进行通信,但是在使用HttpWebRequest调服务器接口会出现超时现象

WPF项目里使用ClientWebSocket和服务端进行通信,一共有2个地方用到了,但是在使用HttpWebRequest调服务器接口会出现超时现象,在固定调用第三次的时候就会出现超时,之后一直都是超时,但是只要我注释掉其中一个使用ClientWebSocket的代码,就不会出现这个问题,我不明白ClientWebSocket还会影响到HttpWebRequest的使用吗,而且每次我都已经将其资源释放了,不明白为什么,有点崩溃,有没有厉害的,大概使用的结构就是下面形式:
对了,使用HttpWebRequest对象的时候我也都把资源释放了
还有,服务端使用了Ngnix来处理请求

ClientWebSocket _webSocket = null;
        // CancellationToken _cancellation = null;

        public async void ClientSocket()
        {
            try
            {
                _webSocket = new ClientWebSocket();
                CancellationToken _cancellation = new CancellationToken();
                //建立连接
                var url = "服务器url";

                await _webSocket.ConnectAsync(new Uri(url), _cancellation);

                var bsend = new byte[1024];

                await _webSocket.SendAsync(new ArraySegment<byte>(bsend), WebSocketMessageType.Binary, true, _cancellation); //发送数据

                while (true)
                {
                    var result = new byte[1024];

                    await _webSocket.ReceiveAsync(new ArraySegment<byte>(result), new CancellationToken()); 
 //这里就是一些服务器返回信息之后的本地处理
                    await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
                    _webSocket.Dispose();
                    _webSocket.Abort();
                    _webSocket = null;
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

为了以防万一,在别的地方我也主动做了一个关闭的处理:

 public async void CloseSocket()
        {
            if (_webSocket != null && _webSocket.State == WebSocketState.Open)
            {
                await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
                _webSocket.Dispose();
                _webSocket.Abort();

            }
        } 

说实话,我完全没看懂这代码在干嘛。你从那个博文里抄的啊

await _webSocket.ConnectAsync(new Uri(url), _cancellation);
 
                var bsend = new byte[1024];
 
                await _webSocket.SendAsync(new ArraySegment<byte>(bsend), WebSocketMessageType.Binary, true, _cancellation); //发送数据


嗯,给服务器发一串1024字节的空数据干嘛??你服务器要求的么?

while (true)
                {
                    var result = new byte[1024];
 
                    await _webSocket.ReceiveAsync(new ArraySegment<byte>(result), new CancellationToken()); 
                    await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
                    _webSocket.Dispose();
                    _webSocket.Abort();
                    _webSocket = null;
                }





嗯,从服务器接收数据我能理解,但是后面一串关闭释放又是干啥的?

websocket是长连接的,发一条收一条就关闭用哪门子的websocket啊。

我觉着你先别急着改代码,自己先用netcore随便写个mock本地服务(花不了5分钟,1分钟建立一个net5/netcore项目,然后用use.websocket d带调试2分钟,编写一个ws的接收和发送代码2分钟)

然后你连接你自己本地的服务器试试看连接本地的服务ok不ok,如果不ok在改你程序。如果ok,请联系你们的运维,让他检查nginx设置去

超时设置长一些
检查网络环境、端口、防火墙、服务器程序