protected TResult ExecuteOperation <TResult>(IReadOperation <TResult> operation, ReadPreference readPreference, bool async)
 {
     using (var binding = CreateReadBinding(readPreference))
         using (var bindingHandle = new ReadBindingHandle(binding))
         {
             return(ExecuteOperation(operation, bindingHandle, async));
         }
 }
 protected async Task <TResult> ExecuteOperationAsync <TResult>(IReadOperation <TResult> operation)
 {
     using (var binding = CreateReadBinding())
         using (var bindingHandle = new ReadBindingHandle(binding))
         {
             return(await ExecuteOperationAsync(operation, bindingHandle));
         }
 }
 protected TResult ExecuteOperation <TResult>(IReadOperation <TResult> operation)
 {
     using (var binding = CreateReadBinding())
         using (var bindingHandle = new ReadBindingHandle(binding))
         {
             return(operation.Execute(bindingHandle, CancellationToken.None));
         }
 }
 protected async Task <TResult> ExecuteOperationAsync <TResult>(IReadOperation <TResult> operation)
 {
     using (var binding = CoreTestConfiguration.GetReadBinding(_session.Fork()))
         using (var bindingHandle = new ReadBindingHandle(binding))
         {
             return(await ExecuteOperationAsync(operation, bindingHandle));
         }
 }
 protected TResult ExecuteOperation <TResult>(IReadOperation <TResult> operation)
 {
     using (var binding = CoreTestConfiguration.GetReadBinding(_session.Fork()))
         using (var bindingHandle = new ReadBindingHandle(binding))
         {
             return(operation.Execute(bindingHandle, CancellationToken.None));
         }
 }
        protected TResult ExecuteOperation <TResult>(IReadOperation <TResult> operation, ReadPreference readPreference, bool async)
        {
            var cluster = CoreTestConfiguration.Cluster;

            using (var binding = new ReadPreferenceBinding(cluster, readPreference, NoCoreSession.NewHandle()))
                using (var bindingHandle = new ReadBindingHandle(binding))
                {
                    return(ExecuteOperation(operation, bindingHandle, async));
                }
        }
Ejemplo n.º 7
0
        private IDisposable RequestStart(IServerSelector serverSelector, ReadPreference readPreference)
        {
            var request = __threadStaticRequest;

            if (request != null)
            {
                var selected = serverSelector.SelectServers(_cluster.Description, new[] { request.ServerDescription }).ToList();
                if (selected.Count == 0)
                {
                    throw new InvalidOperationException("A nested call to RequestStart was made that is not compatible with the existing request.");
                }
                request.NestingLevel++;
                return(new RequestStartResult(this));
            }

            IReadBindingHandle channelBinding;
            ConnectionId       connectionId;
            var server = _cluster.SelectServer(serverSelector, CancellationToken.None);

            using (var channel = server.GetChannel(CancellationToken.None))
            {
                if (readPreference.ReadPreferenceMode == ReadPreferenceMode.Primary)
                {
                    channelBinding = new ReadWriteBindingHandle(new ChannelReadWriteBinding(server, channel.Fork(), NoCoreSession.NewHandle()));
                }
                else
                {
                    channelBinding = new ReadBindingHandle(new ChannelReadBinding(server, channel.Fork(), readPreference, NoCoreSession.NewHandle()));
                }
                connectionId = channel.ConnectionDescription.ConnectionId;
            }

            var serverDescription = server.Description;
            var serverInstance    = _serverInstances.Single(i => EndPointHelper.Equals(i.EndPoint, serverDescription.EndPoint));
            var session           = _operationExecutor.StartImplicitSession(CancellationToken.None);

            __threadStaticRequest = new Request(serverDescription, serverInstance, channelBinding, connectionId, session);

            return(new RequestStartResult(this));
        }
Ejemplo n.º 8
0
        private IDisposable RequestStart(IServerSelector serverSelector, ReadPreference readPreference)
        {
            var request = __threadStaticRequest;

            if (request != null)
            {
                var selected = serverSelector.SelectServers(_cluster.Description, new[] { request.ServerDescription }).ToList();
                if (selected.Count == 0)
                {
                    throw new InvalidOperationException("A nested call to RequestStart was made that is not compatible with the existing request.");
                }
                request.NestingLevel++;
                return(new RequestStartResult(this));
            }

            IReadBindingHandle connectionBinding;
            var server = _cluster.SelectServer(serverSelector);

            using (var connection = server.GetConnection())
            {
                if (readPreference.ReadPreferenceMode == ReadPreferenceMode.Primary)
                {
                    connectionBinding = new ReadWriteBindingHandle(new ConnectionReadWriteBinding(server, connection.Fork()));
                }
                else
                {
                    connectionBinding = new ReadBindingHandle(new ConnectionReadBinding(server, connection.Fork(), readPreference));
                }
            }

            var serverDescription = server.Description;
            var endPoint          = (DnsEndPoint)serverDescription.EndPoint;
            var serverAddress     = new MongoServerAddress(endPoint.Host, endPoint.Port);
            var serverInstance    = _serverInstances.Single(i => i.Address == serverAddress);

            __threadStaticRequest = new Request(serverDescription, serverInstance, connectionBinding);

            return(new RequestStartResult(this));
        }