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