有时ReceiveBufferAsync
方法中的Find
会抛出:
MongoDB.Driver.MongoConnectionException:从服务器接收消息时发生异常。
---> System.IO.IOException:无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而建立连接失败。 ---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败
我认为可以通过该方法中的重试来修复它:
mongodb.driver.core\core\connections\binaryconnection.cs
private async Task<IByteBuffer> ReceiveBufferAsync()
{
try
{
var messageSizeBytes = new byte[4];
await _stream.ReadBytesAsync(messageSizeBytes, 0, 4, _backgroundTaskCancellationToken).ConfigureAwait(false);
var messageSize = BitConverter.ToInt32(messageSizeBytes, 0);
var inputBufferChunkSource = new InputBufferChunkSource(BsonChunkPool.Default);
var buffer = ByteBufferFactory.Create(inputBufferChunkSource, messageSize);
buffer.Length = messageSize;
buffer.SetBytes(0, messageSizeBytes, 0, 4);
await _stream.ReadBytesAsync(buffer, 4, messageSize - 4, _backgroundTaskCancellationToken).ConfigureAwait(false);
_lastUsedAtUtc = DateTime.UtcNow;
buffer.MakeReadOnly();
return buffer;
}
catch (Exception ex)
{
var wrappedException = WrapException(ex, "receiving a message from the server");
ConnectionFailed(wrappedException);
throw wrappedException;
}
}
但我无法找到方法。在这里获取新流?