如何在MongoDb C#驱动程序中添加重试?

时间:2015-04-25 15:33:54

标签: c# mongodb sockets mongodb-.net-driver networkstream

有时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;
            }
}

但我无法找到方法。在这里获取新流?

0 个答案:

没有答案