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();
}
}