示例#1
0
        /// <summary>
        /// Retrieves the connection string
        /// </summary>
        /// <param name="nameOrConnectionString">
        /// String describing the SQL Server conection information
        /// </param>
        /// <returns>Connection string information</returns>
        /// <remarks>
        /// The <paramref name="nameOrConnectionString"/> can be a simple connection string. If it starts
        /// with 'name=', the right side is used as a ke to access the connection
        /// string information described in the standard application configuration file.
        /// </remarks>
        public static string GetConnectionString(string nameOrConnectionString)
        {
            var parts = nameOrConnectionString.Split('=');

            if (parts.Length == 2)
            {
                var mode           = parts[0];
                var connectionName = parts[1];
                if (String.Equals(mode, "name", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(ResourceConnectionFactory.CreateResourceConnection <SqlConnection>(connectionName).ConnectionString);
                }
                if (String.Equals(mode, "connStr", StringComparison.InvariantCultureIgnoreCase))
                {
                    var connectionStringSettings = ConfigurationManager.ConnectionStrings[connectionName];
                    if (connectionStringSettings == null)
                    {
                        throw new ConfigurationErrorsException(
                                  string.Format("ConnectionString with the given name ('{0}') does not exists!",
                                                connectionName));
                    }
                    return(connectionStringSettings.ConnectionString);
                }
            }
            return(nameOrConnectionString);
        }
 /// <summary>
 /// Creates a new execution context using the specified settings.
 /// </summary>
 /// <param name="settings">Context settings</param>
 public DefaultTaskExecutionContext(TaskExecutionContextSettings settings)
 {
     _queueProvider = ResourceConnectionFactory.CreateResourceConnection <INamedQueueProvider>(settings.ProviderKey);
     _properties    = new Dictionary <string, object>();
     foreach (var property in settings.Properties.Values)
     {
         var value = Convert.ChangeType(property.Value, property.Type, CultureInfo.InvariantCulture);
         _properties.Add(property.Name, value);
     }
 }
示例#3
0
        /// <summary>
        /// Creates a new resource connection object from the settings.
        /// </summary>
        /// <returns>Newly created resource object</returns>
        public override object GetResourceConnectionFromSettings()
        {
            var provider = ResourceConnectionFactory.CreateResourceConnection <INamedQueueProvider>(ProviderKey);
            var queue    = provider.GetQueue(QueueName);

            if (queue == null && AutoCreate)
            {
                queue = provider.CreateQueue(QueueName);
            }
            return(queue);
        }
        public void TestInit()
        {
            AppConfigurationManager.Reset();
            TypeResolver.Reset();
            ResourceConnectionProviderRegistry.Reset();
            ResourceConnectionFactory.Reset();
            var settings = new TaskExecutionContextSettings("queue");

            s_Context = new DefaultTaskExecutionContext(settings);

            s_PeekPolicy = new TestPeekPolicy(TimeSpan.FromMilliseconds(10));
        }
        public void WithResultWorks()
        {
            // --- Arrange
            var processor = new QueuedTaskProcessor <ResultTaskWithCompletedResetEvent, string, int>(s_Context)
            {
                DoNotPeekWhenCheckingTasks = false,
                MaxDequeuCountBeforeDrop   = 5,
                MaxMessagesReadFromQueue   = 25,
                PeekPolicy = s_PeekPolicy,
                VisibilityTimeoutInSeconds = 30,
                RequestQueueKey            = REQUEST_QUEUE,
                ResponseQueueKey           = RESPONSE_QUEUE,
                TaskSleepInMilliseconds    = 20
            };
            var queue         = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(REQUEST_QUEUE);
            var responseQueue = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(RESPONSE_QUEUE);

            queue.Clear();
            //responseQueue.Clear();
            queue.PutMessage("testmessage1", 70);
            queue.PutMessage("testmsg2", 70);
            ResultTaskWithCompletedResetEvent.DisposeTimes = 0;
            ResultTaskWithCompletedResetEvent.RunTimes     = 0;
            ResultTaskWithCompletedResetEvent.SetupTimes   = 0;
            s_TasksCompletedAutoResetEvent = new AutoResetEvent(false);
            bool completedSuccessfully;

            using (s_TasksCompletedAutoResetEvent)
            {
                // --- Act
                processor.Start();
                //wait for both tasks to complete (Sets, if the 2. message's dispose is finished)
                completedSuccessfully = s_TasksCompletedAutoResetEvent.WaitOne(10000);
                processor.Stop();
            }
            // --- Assert

            ResultTaskWithCompletedResetEvent.SetupTimes.ShouldEqual(2);
            ResultTaskWithCompletedResetEvent.RunTimes.ShouldEqual(2);
            ResultTaskWithCompletedResetEvent.DisposeTimes.ShouldEqual(2);
            completedSuccessfully.ShouldBeTrue("Tasks did not complete in 10 seconds");
            ResultTaskWithCompletedResetEvent.ResultDict.ContainsValue("testmessage1").ShouldBeTrue();
            ResultTaskWithCompletedResetEvent.ResultDict.ContainsValue("testmsg2").ShouldBeTrue();
            var messages = responseQueue.GetMessages(2, 40);

            foreach (var message in messages)
            {
                ResultTaskWithCompletedResetEvent.ResultDict[Convert.ToInt32(message.MessageText)]
                .Length.ShouldEqual(Convert.ToInt32(message.MessageText));
            }
            processor.Dispose();
        }
        public void ConfigurationWorksFromAlternateSection()
        {
            // --- Arrange
            var onChangedCalled = false;

            ResourceConnectionFactory.ConfigurationChanged +=
                (sender, args) => { onChangedCalled = true; };

            // --- Act
            ResourceConnectionFactory.Configure("ResourceConnections1");

            // --- Assert
            onChangedCalled.ShouldBeTrue();
        }
        public void CantGiveHigherDefaultWaitTimeThanMaximum()
        {
            // --- Arrange
            var queue = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(REQUEST_QUEUE);

            queue.Clear();
            using (var queueProcessor = new TestQueueProcessor <DummyTask>(3))
            {
                // --- Act
                queueProcessor.TaskSleepInMilliseconds = 5000;

                // --- Assert
                queueProcessor.Start();
                queueProcessor.CheckedGivenTimes.WaitOne(5000);
                queueProcessor.PeekTimes.Count.ShouldEqual(3);
                queueProcessor.PeekTimes[1].TotalMilliseconds.ShouldBeBetween(450, 600);
                queueProcessor.PeekTimes[2].TotalMilliseconds.ShouldBeBetween(450, 600);
            }
        }
        public void DefaultPeekPolicyWorksAsExpected()
        {
            // --- Arrange
            var queue = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(REQUEST_QUEUE);

            queue.Clear();
            using (var queueProcessor = new TestQueueProcessor <DummyTask>(6))
            {
                // --- Act
                queueProcessor.Start();
                queueProcessor.CheckedGivenTimes.WaitOne(10000);

                // --- Assert
                queueProcessor.PeekTimes.Count.ShouldEqual(6);
                queueProcessor.PeekTimes[1].TotalMilliseconds.ShouldBeBetween(50, 175);
                queueProcessor.PeekTimes[2].TotalMilliseconds.ShouldBeBetween(150, 385);
                queueProcessor.PeekTimes[3].TotalMilliseconds.ShouldBeBetween(350, 500);
                queueProcessor.PeekTimes[4].TotalMilliseconds.ShouldBeBetween(450, 600);
                queueProcessor.PeekTimes[5].TotalMilliseconds.ShouldBeBetween(450, 600);
            }
        }
        public void StopWorks()
        {
            // --- Arrange
            var processor = new QueuedTaskProcessor <TaskWithSetupEvent, string>(s_Context)
            {
                DoNotPeekWhenCheckingTasks = false,
                MaxDequeuCountBeforeDrop   = 10,
                MaxMessagesReadFromQueue   = 25,
                PeekPolicy = s_PeekPolicy,
                VisibilityTimeoutInSeconds = 30,
                RequestQueueKey            = "requestQueue",
                TaskSleepInMilliseconds    = 20
            };

            var queue = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(REQUEST_QUEUE);

            queue.Clear();
            queue.PutMessage("testmessage1", 70);
            queue.PutMessage("testmsg2", 70);
            TaskWithSetupEvent.DisposeTimes = 0;
            TaskWithSetupEvent.RunTimes     = 0;
            TaskWithSetupEvent.SetupTimes   = 0;
            s_TaskSetupAutoResetEvent       = new AutoResetEvent(false);
            bool completedSuccessfully;

            using (s_TaskSetupAutoResetEvent)
            {
                // --- Act
                processor.Start();
                //wait for the first task to finish setup
                completedSuccessfully = s_TaskSetupAutoResetEvent.WaitOne(10000);
                processor.Stop();
            }
            // --- Assert
            completedSuccessfully.ShouldBeTrue("Tasks did not complete in 10 seconds");
            TaskWithSetupEvent.SetupTimes.ShouldEqual(1, "Setup");
            TaskWithSetupEvent.RunTimes.ShouldEqual(0, "Run");
            TaskWithSetupEvent.DisposeTimes.ShouldEqual(1, "Dispose");
            processor.Dispose();
        }
        public void StopWithTimeOutDoesNotThrowExeption()
        {
            // --- Arrange
            var queue = ResourceConnectionFactory.CreateResourceConnection <INamedQueue>(REQUEST_QUEUE);

            queue.Clear();
            for (var i = 0; i < 10; i++)
            {
                queue.PutMessage(i.ToString(CultureInfo.InvariantCulture), 5);
            }
            using (var queueProcessor = new TestQueueProcessor <LongDummyTask>(5))
            {
                queueProcessor.StopTimeout = TimeSpan.FromMilliseconds(200);
                using (s_TaskRunningAutoResetEvent = new AutoResetEvent(false))
                {
                    queueProcessor.Start();
                    // --- Act
                    s_TaskRunningAutoResetEvent.WaitOne(4000);
                    queueProcessor.Stop();
                }
            }
        }
 public void ConfigurationWithDefaultSectionWorks()
 {
     // --- Act
     ResourceConnectionFactory.Configure();
 }
 public void ConfigurationWithFactoryInstanceWorks()
 {
     // --- Act
     ResourceConnectionFactory.Configure(ResourceConnectionFactory.Current);
 }
 public void Initilaize()
 {
     ResourceConnectionProviderRegistry.Reset();
     ResourceConnectionFactory.Reset();
 }