<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Quartz.Net</title>
        <link>http://geekswithblogs.net/TarunArora/category/13586.aspx</link>
        <description>Enterprise Scheduling, Task Automation, Job Execution</description>
        <language>en-GB</language>
        <copyright>Tarun Arora [Microsoft MVP]</copyright>
        <managingEditor>tarun.arora@avanade.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Quartz.Net scheduler exposed via a Web Service</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2013/01/20/quartz.net-scheduler-exposed-via-a-web-service.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2013/01/20/quartz.net-scheduler-exposed-via-a-web-service.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2013/01/20/quartz.net-scheduler-exposed-via-a-web-service.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;I had been given a business requirement to provide a self service Website for job scheduling. Having worked with Quartz.Net, it seemed the perfect backend engine to schedule and process jobs. I decided to expose the functionality of the Quartz.Net via a few web methods using Web services to allow for it to be consumed in Excel, SharePoint, a Web or a desktop app. In this blog post I’ll show you how to expose Quartz.Net via a Web Service. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Quartz.NetschedulerexposedviaaWebService_CA94/image_4.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Quartz.NetschedulerexposedviaaWebService_CA94/image_thumb_1.png" width="723" height="322" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you are new to Quartz.Net I would recommend going through,&lt;/font&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font size="3" face="Calibri"&gt;01 - &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;A brief introduction to Quartz.net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;02 - &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Walkthrough of Installing &amp;amp; Testing Quartz.Net as a Windows Service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;03 - &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Writing &amp;amp; Scheduling your First Hello World job with Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;04 - &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;How to Configuring Logging for Quartz.Net windows service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;05 -&lt;a href="http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Config Gotyas when setting up Quartz.Net on the server&lt;/u&gt;&lt;/font&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;&lt;font face="Calibri"&gt;01 – Architecture&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- The Scheduler Web Service (Scheduler.asmx) is hosted on a Web Server.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- I currently have 3 App Servers which are running Quartz.Net as a windows service. The names of these app servers are ‘Alpha’, ‘Beta’ and ‘Gamma’. I have added a firewall exception for port 555 for Quartz.Net to listen on port 555. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- Tags: Interesting! Now you would ask, what are tags? Tags are basically my way of identifying which type of scheduled jobs is my quartz app server capable of running. For instance Alpha is only equipped to schedule PowerShell specific jobs, while Beta can schedule VBA jobs and Gamma can schedule any job that requires the cmd process. You can scale this out to include .Net, Python or just different versions of a process. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- XML: The xml config you see flowing from the user to the web server is the job description i.e. the request for scheduling Job X while specifying the schedule, priority, etc.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Quartz.NetschedulerexposedviaaWebService_CA94/image_8.png"&gt;&lt;font color="#000000" size="3" face="Calibri"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Quartz.NetschedulerexposedviaaWebService_CA94/image_thumb_3.png" width="657" height="405" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3" face="Calibri"&gt;02 – Business Logic&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Please see the business Logic below for the methods you have seen in the web service signature above. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Specialized;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz.Impl;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz.Impl.Matchers;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Rte.Model.Entities;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Scheduler.Business
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Scheduler
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; IScheduler Instance;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Address { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; JobName { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; JobGroup { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Priority { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CronExpression { get; set; }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ISchedulerFactory _schedulerFactory;


        &lt;span class="kwrd"&gt;public&lt;/span&gt; Scheduler(&lt;span class="kwrd"&gt;string&lt;/span&gt; server, &lt;span class="kwrd"&gt;int&lt;/span&gt; port, &lt;span class="kwrd"&gt;string&lt;/span&gt; scheduler)
        {
            Address = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"tcp://{0}:{1}/{2}"&lt;/span&gt;, server, port, scheduler);
            _schedulerFactory = &lt;span class="kwrd"&gt;new&lt;/span&gt; StdSchedulerFactory(GetProperties(Address));

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                Instance = _schedulerFactory.GetScheduler();

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Instance.IsStarted)
                    Instance.Start();
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (SchedulerException ex)
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Failed: {0}"&lt;/span&gt;, ex.Message));
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; NameValueCollection GetProperties(&lt;span class="kwrd"&gt;string&lt;/span&gt; address)
        {
            var properties = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameValueCollection();
            properties[&lt;span class="str"&gt;"quartz.scheduler.instanceName"&lt;/span&gt;] = &lt;span class="str"&gt;"ServerScheduler"&lt;/span&gt;;
            properties[&lt;span class="str"&gt;"quartz.scheduler.proxy"&lt;/span&gt;] = &lt;span class="str"&gt;"true"&lt;/span&gt;;
            properties[&lt;span class="str"&gt;"quartz.threadPool.threadCount"&lt;/span&gt;] = &lt;span class="str"&gt;"0"&lt;/span&gt;;
            properties[&lt;span class="str"&gt;"quartz.scheduler.proxy.address"&lt;/span&gt;] = address;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; properties;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; IScheduler GetScheduler()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Instance;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;GroupStatus&amp;gt; GetGroups()
        {
            var results = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;GroupStatus&amp;gt;();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var gp &lt;span class="kwrd"&gt;in&lt;/span&gt; Instance.GetJobGroupNames())
            {
                results.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GroupStatus()
                    {
                        Group = gp,
                        IsJobGroupPaused = Instance.IsJobGroupPaused(gp),
                        IsTriggerGroupPaused = Instance.IsTriggerGroupPaused(gp)
                    });
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; results;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; JobSchedule GetSchedule()
        {
            var jobKey = &lt;span class="kwrd"&gt;new&lt;/span&gt; JobKey(JobName, JobGroup);

            var trigger = Instance.GetTriggersOfJob(jobKey).FirstOrDefault();

            var js = &lt;span class="kwrd"&gt;new&lt;/span&gt; JobSchedule();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (trigger != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                js.Name = trigger.Key.Name;
                js.Group = trigger.Key.Group;
                js.Description = trigger.Description;
                js.Priority = trigger.Priority;
                js.TriggerType = trigger.GetType().Name;
                js.TriggerState = Instance.GetTriggerState(trigger.Key).ToString();

                DateTimeOffset? startTime = trigger.StartTimeUtc;
                js.StartTime = TimeZone.CurrentTimeZone.ToLocalTime(startTime.Value.DateTime);

                var nextFireTime = trigger.GetNextFireTimeUtc();
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nextFireTime.HasValue)
                {
                    js.NextFire = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTime.Value.DateTime);
                }

                var previousFireTime = trigger.GetPreviousFireTimeUtc();
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (previousFireTime.HasValue)
                {
                    js.LastFire = TimeZone.CurrentTimeZone.ToLocalTime(previousFireTime.Value.DateTime);
                }
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; js;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;JobSchedule&amp;gt; GetSchedules()
        {
            var jcs = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;JobSchedule&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var group &lt;span class="kwrd"&gt;in&lt;/span&gt; Instance.GetJobGroupNames())
            {
                var groupMatcher = GroupMatcher&amp;lt;JobKey&amp;gt;.GroupContains(group);
                var jobKeys = Instance.GetJobKeys(groupMatcher);

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var jobKey &lt;span class="kwrd"&gt;in&lt;/span&gt; jobKeys)
                {
                    var triggers = Instance.GetTriggersOfJob(jobKey);
                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var trigger &lt;span class="kwrd"&gt;in&lt;/span&gt; triggers)
                    {
                        var js = &lt;span class="kwrd"&gt;new&lt;/span&gt; JobSchedule();
                        js.Name = jobKey.Name;
                        js.Group = jobKey.Group;
                        js.TriggerType = trigger.GetType().Name;
                        js.TriggerState = Instance.GetTriggerState(trigger.Key).ToString();
                        js.Priority = trigger.Priority;

                        DateTimeOffset? startTime = trigger.StartTimeUtc;
                        js.StartTime = TimeZone.CurrentTimeZone.ToLocalTime(startTime.Value.DateTime);

                        DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc();
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (nextFireTime.HasValue)
                        {
                            js.NextFire = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTime.Value.DateTime);
                        }

                        DateTimeOffset? previousFireTime = trigger.GetPreviousFireTimeUtc();
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (previousFireTime.HasValue)
                        {
                            js.LastFire = TimeZone.CurrentTimeZone.ToLocalTime(previousFireTime.Value.DateTime);
                        }

                        jcs.Add(js);
                    }
                }
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; jcs;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;JobSchedule&amp;gt; GetSchedules(&lt;span class="kwrd"&gt;string&lt;/span&gt; groupName)
        {
            var jcs = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;JobSchedule&amp;gt;();

            var groupMatcher = GroupMatcher&amp;lt;JobKey&amp;gt;.GroupContains(groupName);
            var jobKeys = Instance.GetJobKeys(groupMatcher);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var jobKey &lt;span class="kwrd"&gt;in&lt;/span&gt; jobKeys)
            {
                var triggers = Instance.GetTriggersOfJob(jobKey);
                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var trigger &lt;span class="kwrd"&gt;in&lt;/span&gt; triggers)
                {
                    var js = &lt;span class="kwrd"&gt;new&lt;/span&gt; JobSchedule();
                    js.Name = jobKey.Name;
                    js.Description = trigger.Description;
                    js.Group = jobKey.Group;
                    js.TriggerType = trigger.GetType().Name;
                    js.TriggerState = Instance.GetTriggerState(trigger.Key).ToString();
                    js.Priority = trigger.Priority;

                    DateTimeOffset? startTime = trigger.StartTimeUtc;
                    js.StartTime = TimeZone.CurrentTimeZone.ToLocalTime(startTime.Value.DateTime);

                    DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc();
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (nextFireTime.HasValue)
                    {
                        js.NextFire = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTime.Value.DateTime);
                    }

                    DateTimeOffset? previousFireTime = trigger.GetPreviousFireTimeUtc();
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (previousFireTime.HasValue)
                    {
                        js.LastFire = TimeZone.CurrentTimeZone.ToLocalTime(previousFireTime.Value.DateTime);
                    }

                    jcs.Add(js);
                }
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; jcs;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetMetaData()
        {
            var metaData = Instance.GetMetaData();

            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(
                &lt;span class="str"&gt;"{0}Name: '{1}'{0}Version: '{2}'{0}ThreadPoolSize: '{3}'{0}IsRemote: '{4}'{0}JobStoreName: '{5}'&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;                 {0}SupportsPersistance: '{6}'{0}IsClustered: '{7}'"&lt;/span&gt;,
                Environment.NewLine, metaData.SchedulerName, metaData.Version, metaData.ThreadPoolSize,
                metaData.SchedulerRemote, metaData.JobStoreType.Name, metaData.JobStoreSupportsPersistence,
                metaData.JobStoreClustered);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; UnscheduleJob()
        {
            var jobKey = &lt;span class="kwrd"&gt;new&lt;/span&gt; JobKey(JobName, JobGroup);

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Instance.CheckExists(jobKey))
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Instance.UnscheduleJob(&lt;span class="kwrd"&gt;new&lt;/span&gt; TriggerKey(JobName, JobGroup));
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; UnscheduleAll()
        {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var group &lt;span class="kwrd"&gt;in&lt;/span&gt; Instance.GetTriggerGroupNames())
            {
                var groupMatcher = GroupMatcher&amp;lt;JobKey&amp;gt;.GroupContains(group);
                var jobKeys = Instance.GetJobKeys(groupMatcher);

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var triggers &lt;span class="kwrd"&gt;in&lt;/span&gt; jobKeys.Select(jobKey =&amp;gt; Instance.GetTriggersOfJob(jobKey)))
                {
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; Instance.UnscheduleJobs(triggers.Select(t =&amp;gt; t.Key).ToList());
                }
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DeleteAll()
        {
            Instance.Clear();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RescheduleJob()
        {
            &lt;span class="rem"&gt;// Build new trigger&lt;/span&gt;
            var trigger = (ICronTrigger)TriggerBuilder.Create()
                .WithIdentity(JobName, JobGroup)
                .WithCronSchedule(CronExpression)
                .WithPriority(Priority)
                &lt;span class="rem"&gt;//.StartAt(StartAt.ToUniversalTime())&lt;/span&gt;
                .Build();

            Instance.RescheduleJob(&lt;span class="kwrd"&gt;new&lt;/span&gt; TriggerKey(JobName, JobGroup), trigger);
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I hope this is useful for you… &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was sixth in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering how to build a sample MVC website to look at the jobs scheduled via Quartz.Net scheduling windows service. &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;All Quartz.Net specific blog posts are listed here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://feeds.feedburner.com/TarunArora&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/151885.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora [Microsoft MVP]</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2013/01/20/quartz.net-scheduler-exposed-via-a-web-service.aspx</guid>
            <pubDate>Sun, 20 Jan 2013 14:24:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2013/01/20/quartz.net-scheduler-exposed-via-a-web-service.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/151885.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/151885.aspx</trackback:ping>
        </item>
        <item>
            <title>Quartz.Net Windows Service on Server Important Configuration Steps To Remember</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Calibri"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Are you running Quartz.Net as a windows service on a remote server and trying to connect to it from a client to schedule jobs? Then I would highly recommend reading the below listed configuration steps to save your self from endless hours of debugging.&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;01 – How to ensure that the Quartz.NET service is executing jobs on the server and not locally? &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;02 – Fixing “Scheduler with the name xxx already exists.” issue &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you are new to Quartz.Net I would recommend going through,&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;01 - &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;A brief introduction to Quartz.net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;02 - &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Walkthrough of Installing &amp;amp; Testing Quartz.Net as a Windows Service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;03 - &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Writing &amp;amp; Scheduling your First Hello World job with Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;04 - &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;How to Configuring Logging for Quartz.Net windows service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;01 - How to ensure that the Quartz.NET service is executing jobs on the server and not locally?&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;To ensure that Quartz.Net schedules the job on the *remote server* and not on the local instance you need to set the thread count to 0 along with other properties shown below at the time of instantiating a new instance of the scheduler service,&lt;/font&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// address = string.Format("tcp://{0}:{1}/{2}", server, port, scheduler)&lt;/span&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; NameValueCollection GetProperties(&lt;span class="kwrd"&gt;string&lt;/span&gt; address) 
{
     var properties = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameValueCollection();
     properties[&lt;span class="str"&gt;"quartz.scheduler.instanceName"&lt;/span&gt;] = &lt;span class="str"&gt;"ServerScheduler"&lt;/span&gt;;
     properties[&lt;span class="str"&gt;"quartz.scheduler.proxy"&lt;/span&gt;] = &lt;span class="str"&gt;"true"&lt;/span&gt;;
     properties[&lt;span class="str"&gt;"quartz.threadPool.threadCount"&lt;/span&gt;] = &lt;span class="str"&gt;"0"&lt;/span&gt;;
     properties[&lt;span class="str"&gt;"quartz.scheduler.proxy.address"&lt;/span&gt;] = address;
     &lt;span class="kwrd"&gt;return&lt;/span&gt; properties;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;img alt="SNAGHTML3a6dd4be" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a6dd4be_thumb.png" /&gt;&lt;/p&gt;

&lt;h6&gt;Figure 1 – Quartz.Net config, contains useful details, does not need to be changed&lt;/h6&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Value of the properties that need to be passed while instantiating a new instance of Quartz service,&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Address:&lt;/strong&gt; The address needs to be passed in the format &lt;strong&gt;tcp://NameOfSeverWhereQuartzIsInstalled:555/QuartzScheduler&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Instance Name:&lt;/strong&gt; You can find the instance name from the Quartz.Net config file on the server. See in the config above, the instance name is ‘ServerScheduler’ &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Proxy:&lt;/strong&gt; Set the proxy to true&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;ThreadCount:&lt;/strong&gt; If you don’t specify the threadcount to 0, quartz.net will spin a local instance of the service to schedule your job. This means, your job would be scheduled but not on the server that you intended for it to be scheduled. The down side is, as soon as the local process terminates, the schedule will be lost.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;The values you specify for the properties before instantiating the Quartz scheduler will have precedence over the values in the config file. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3" face="Calibri"&gt;How to validate that the Quartz.Net scheduler service is scheduling remotely and not locally?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;You can use the GetMetaData() method on the instance of Scheduler to get information such as the version of quartz.net, threadpool size, jobStoreType, jobStorePersistanceType, etc. This important method also returns the property ‘IsRemote’. If you have correctly configured the scheduler and correctly instanciated it, the value of this property should be ‘True’&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Qua.NetWindowsServiceonServerImportantCo_BC9D/image_2.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/Qua.NetWindowsServiceonServerImportantCo_BC9D/image_thumb.png" width="709" height="81" /&gt;&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;02 – Fixing “Scheduler with the name xxx already exists.” issue&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;This would typically happen if you try to instantiate a new instance of the scheduler when you already have one active instance loaded in the process. The easiest way to avoid this is by implementing Scheduler instantiation using the singleton pattern. See the sample code for instantiating Quartz.Net using the Singleton pattern. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Scheduler is a singleton implementation. The class is instantiated only when the server name, port number and scheduler name input parameters are passed. Using this allows you to invoke the StdSchedulerFactory method and search if there is already an instance of scheduler instantiated using these properties. If so, return that instance other wise create a new instance and remember it. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt; &lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Scheduler
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; IScheduler Instance;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Address { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; JobName { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; JobGroup { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Priority { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CronExpression { get; set; }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ISchedulerFactory _schedulerFactory;


    &lt;span class="kwrd"&gt;public&lt;/span&gt; Scheduler(&lt;span class="kwrd"&gt;string&lt;/span&gt; server, &lt;span class="kwrd"&gt;int&lt;/span&gt; port, &lt;span class="kwrd"&gt;string&lt;/span&gt; scheduler)
    {
        Address = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"tcp://{0}:{1}/{2}"&lt;/span&gt;, server, port, scheduler);
        _schedulerFactory = &lt;span class="kwrd"&gt;new&lt;/span&gt; StdSchedulerFactory(GetProperties(Address));

        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            Instance = _schedulerFactory.GetScheduler();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Instance.IsStarted)
                Instance.Start();
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (SchedulerException ex)
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Failed: {0}"&lt;/span&gt;, ex.Message));
        }
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; NameValueCollection GetProperties(&lt;span class="kwrd"&gt;string&lt;/span&gt; address) 
    {
        var properties = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameValueCollection();
        properties[&lt;span class="str"&gt;"quartz.scheduler.instanceName"&lt;/span&gt;] = &lt;span class="str"&gt;"ServerScheduler"&lt;/span&gt;;
        properties[&lt;span class="str"&gt;"quartz.scheduler.proxy"&lt;/span&gt;] = &lt;span class="str"&gt;"true"&lt;/span&gt;;
        properties[&lt;span class="str"&gt;"quartz.threadPool.threadCount"&lt;/span&gt;] = &lt;span class="str"&gt;"0"&lt;/span&gt;;
        properties[&lt;span class="str"&gt;"quartz.scheduler.proxy.address"&lt;/span&gt;] = address;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; properties;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; IScheduler GetScheduler()
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; Instance;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you wanted to call Scheduler then you should be using something like the code sample below…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Simply calling the Scheduler class with the name of the server where Quartz is installed, the port on which the quartz service is listening and the name of the scheduler. &lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; SchedulerMetaData GetMetaData()
{
        var scheduler = &lt;span class="kwrd"&gt;new&lt;/span&gt; Scheduler(&lt;span class="str"&gt;"ServerName"&lt;/span&gt;, Convert.ToInt32(&lt;span class="str"&gt;"PortNumber"&lt;/span&gt;), &lt;span class="str"&gt;"Scheduler"&lt;/span&gt;));
        return scheduler.GetMetaData();
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I hope this helps! &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was fifth in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering how to expose the functionality of the Quartz.Net scheduling service via WebService. &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;All Quartz.Net specific blog posts are listed here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://feeds.feedburner.com/TarunArora&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/151878.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora [Microsoft MVP]</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx</guid>
            <pubDate>Sat, 19 Jan 2013 15:51:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2013/01/19/quartz.net-windows-service-on-server-important-configuration-steps-to-remember.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/151878.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/151878.aspx</trackback:ping>
        </item>
        <item>
            <title>Quartz.Net Windows Service Configure Logging</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;In this blog post I’ll be covering,&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Logging for Quartz.Net Windows Service&lt;/font&gt;       &lt;ul&gt;       &lt;li&gt;&lt;font size="3" face="Calibri"&gt;01 – Why doesn’t Quartz.Net Windows Service log by default&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font size="3" face="Calibri"&gt;02 – Configuring Quartz.Net windows service for logging to eventlog, file, console, etc&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font size="3" face="Calibri"&gt;03 – Results: Logging in action&lt;/font&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you are new to Quartz.Net I would recommend going through,&lt;/font&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font size="3" face="Calibri"&gt;A brief &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Introduction to Quartz.net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Walkthrough of &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Installing &amp;amp; Testing Quartz.Net as a Windows Service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Writing &amp;amp; Scheduling your &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;First HelloWorld job with Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;01 – Why doesn’t Quartz.Net Windows Service log by default&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you are trying to figure out why…&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;The Quartz.Net windows service isn’t logging&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;The Quartz.Net windows service isn’t writing anything to the event log&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;The Quartz.Net windows service isn’t writing anything to a file &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;How do I configure Quartz.Net windows service to use log4Net&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;How do I change the level of logging for Quartz.Net &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;strong&gt;Look no further, This blog post should help you answer these questions.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Quartz.NET uses the Common.Logging framework for all of its logging needs. If you navigate to the directory where Quartz.Net Windows Service is installed (I have the service installed in C:\Program Files (x86)\Quartz.net, you can find out the location by looking at the properties of the service) and open &lt;strong&gt;‘Quartz.Server.exe.config’&lt;/strong&gt; you’ll see that the Quartz.Net is already set up for logging to ConsoleAppender and EventLogAppender, but only ‘ConsoleAppender’ is set up as active. So, unless you have the console associated to the Quartz.Net service you won’t be able to see any logging.&lt;/font&gt; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&amp;lt;log4net&amp;gt;
    &amp;lt;appender name=&lt;span class="str"&gt;"ConsoleAppender"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Appender.ConsoleAppender"&lt;/span&gt;&amp;gt;
        &amp;lt;layout type=&lt;span class="str"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&amp;gt;
            &amp;lt;conversionPattern &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"%d [%t] %-5p %l - %m%n"&lt;/span&gt; /&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
    &amp;lt;appender name=&lt;span class="str"&gt;"EventLogAppender"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Appender.EventLogAppender"&lt;/span&gt;&amp;gt;
        &amp;lt;layout type=&lt;span class="str"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&amp;gt;
            &amp;lt;conversionPattern &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"%d [%t] %-5p %l - %m%n"&lt;/span&gt; /&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
    &amp;lt;root&amp;gt;
        &amp;lt;level &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"INFO"&lt;/span&gt; /&amp;gt;
        &amp;lt;appender-&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;ref&lt;/span&gt;=&lt;span class="str"&gt;"ConsoleAppender"&lt;/span&gt; /&amp;gt;
  &lt;font style="background-color: #ffff00"&gt;&amp;lt;!-- uncomment to enable &lt;span class="kwrd"&gt;event&lt;/span&gt; log appending --&amp;gt;
        &amp;lt;!-- &amp;lt;appender-&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;ref&lt;/span&gt;=&lt;span class="str"&gt;"EventLogAppender"&lt;/span&gt; /&amp;gt; --&amp;gt;&lt;/font&gt;
    &amp;lt;/root&amp;gt;
&amp;lt;/log4net&amp;gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Problem: In the configuration above Quartz.Net Windows Service only has ConsoleAppender active. So, no logging will be done to EventLog. More over the RollingFileAppender isn’t setup at all. So, Quartz.Net will not log to an application trace log file. &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;&lt;font size="4" face="Calibri"&gt;02 – Configuring Quartz.Net windows service for logging to eventlog, file, console, etc&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Let’s change this behaviour by changing the config file… In the below config file, &lt;/font&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;font size="3" face="Calibri"&gt;I have added the RollingFileAppender. This will configure Quartz.Net service to write to a log file. (&amp;lt;appender name="GeneralLog" type="log4net.Appender.RollingFileAppender"&amp;gt;)&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font size="3" face="Calibri"&gt;I have specified the location for the log file (&amp;lt;arg key="configFile" value="Trace/application.log.txt"/&amp;gt;)&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font size="3" face="Calibri"&gt;I have enabled the EventLogAppender and RollingFileAppender to be written to by Quartz. Net windows service&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Changed the default level of logging from ‘Info’ to ‘All’. This means all activity performed by Quartz.Net Windows service will be logged. You might want to tune this back to ‘Debug’ or ‘Info’ later as logging ‘All’ will produce too much data to the logs. (&amp;lt;level value="ALL"/&amp;gt;)&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Since I have changed the logging level to ‘All’, I have added applicationSetting to remove logging log4Net internal debugging. (&amp;lt;add key="log4net.Internal.Debug" value="false"/&amp;gt;)&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharpcode"&gt;&amp;lt;?xml version=&lt;span class="str"&gt;"1.0"&lt;/span&gt; encoding=&lt;span class="str"&gt;"utf-8"&lt;/span&gt; ?&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;configSections&amp;gt;
        &amp;lt;section name=&lt;span class="str"&gt;"quartz"&lt;/span&gt; type=&lt;span class="str"&gt;"System.Configuration.NameValueSectionHandler, &lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;                                     System, Version=1.0.5000.0,Culture=neutral, &lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;                                     PublicKeyToken=b77a5c561934e089"&lt;/span&gt; /&amp;gt;
            &amp;lt;section name=&lt;span class="str"&gt;"log4net"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Config.Log4NetConfigurationSectionHandler, log4net"&lt;/span&gt; /&amp;gt;
        &amp;lt;sectionGroup name=&lt;span class="str"&gt;"common"&lt;/span&gt;&amp;gt;
            &amp;lt;section name=&lt;span class="str"&gt;"logging"&lt;/span&gt; type=&lt;span class="str"&gt;"Common.Logging.ConfigurationSectionHandler, Common.Logging"&lt;/span&gt; /&amp;gt;
        &amp;lt;/sectionGroup&amp;gt;
    &amp;lt;/configSections&amp;gt;

    &amp;lt;common&amp;gt;
        &amp;lt;logging&amp;gt;
            &amp;lt;factoryAdapter type=&lt;span class="str"&gt;"Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net"&lt;/span&gt;&amp;gt;
                &amp;lt;arg key=&lt;span class="str"&gt;"configType"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"INLINE"&lt;/span&gt; /&amp;gt;                
                &lt;font style="background-color: #ffff00"&gt;&amp;lt;arg key=&lt;span class="str"&gt;"configFile"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Trace/application.log.txt"&lt;/span&gt;/&amp;gt;
                &amp;lt;arg key=&lt;span class="str"&gt;"level"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"ALL"&lt;/span&gt; /&amp;gt;&lt;/font&gt;
            &amp;lt;/factoryAdapter&amp;gt;
        &amp;lt;/logging&amp;gt;
    &amp;lt;/common&amp;gt;
    &lt;font style="background-color: #ffff00"&gt;&amp;lt;appSettings&amp;gt;
      &amp;lt;add key=&lt;span class="str"&gt;"log4net.Internal.Debug"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"false"&lt;/span&gt;/&amp;gt;
    &amp;lt;/appSettings&amp;gt;&lt;/font&gt;
    &amp;lt;log4net&amp;gt;
        &amp;lt;appender name=&lt;span class="str"&gt;"ConsoleAppender"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Appender.ConsoleAppender"&lt;/span&gt;&amp;gt;
            &amp;lt;layout type=&lt;span class="str"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&amp;gt;
                &amp;lt;conversionPattern &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"%d [%t] %-5p %l - %m%n"&lt;/span&gt; /&amp;gt;
            &amp;lt;/layout&amp;gt;
        &amp;lt;/appender&amp;gt;
        &amp;lt;appender name=&lt;span class="str"&gt;"EventLogAppender"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Appender.EventLogAppender"&lt;/span&gt;&amp;gt;
            &amp;lt;layout type=&lt;span class="str"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&amp;gt;
                &amp;lt;conversionPattern &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"%d [%t] %-5p %l - %m%n"&lt;/span&gt; /&amp;gt;
            &amp;lt;/layout&amp;gt;
        &amp;lt;/appender&amp;gt;
&lt;font style="background-color: #ffff00"&gt;        &amp;lt;appender name=&lt;span class="str"&gt;"GeneralLog"&lt;/span&gt; type=&lt;span class="str"&gt;"log4net.Appender.RollingFileAppender"&lt;/span&gt;&amp;gt;
            &amp;lt;file &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Trace/application.log.txt"&lt;/span&gt;/&amp;gt;
            &amp;lt;appendToFile &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"true"&lt;/span&gt;/&amp;gt;
            &amp;lt;maximumFileSize &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"1024KB"&lt;/span&gt;/&amp;gt;
            &amp;lt;rollingStyle &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Size"&lt;/span&gt;/&amp;gt;
            &amp;lt;layout type=&lt;span class="str"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&amp;gt;
              &amp;lt;conversionPattern &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"%d{HH:mm:ss} [%t] %-5p %c - %m%n"&lt;/span&gt;/&amp;gt;
            &amp;lt;/layout&amp;gt;
          &amp;lt;/appender&amp;gt;
&lt;/font&gt;        &amp;lt;root&amp;gt;
            &lt;font style="background-color: #ffff00"&gt;&amp;lt;level &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"ALL"&lt;/span&gt; /&amp;gt;
&lt;/font&gt;            &amp;lt;appender-&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;ref&lt;/span&gt;=&lt;span class="str"&gt;"ConsoleAppender"&lt;/span&gt; /&amp;gt;
            &lt;font style="background-color: #ffff00"&gt;&amp;lt;appender-&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;ref&lt;/span&gt;=&lt;span class="str"&gt;"EventLogAppender"&lt;/span&gt; /&amp;gt;
&lt;/font&gt;            &lt;font style="background-color: #ffff00"&gt;&amp;lt;appender-&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;ref&lt;/span&gt;=&lt;span class="str"&gt;"GeneralLog"&lt;/span&gt;/&amp;gt;
&lt;/font&gt;        &amp;lt;/root&amp;gt;
    &amp;lt;/log4net&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt; – &lt;font color="#ff0000"&gt;&lt;strong&gt;Please ensure you restart the Quartz.Net Windows service for the config changes to be picked up by the service&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;&lt;font size="4" face="Calibri"&gt;03 – Results: Logging in action&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Once you start the Quartz.Net Windows Service up, the logging should be initiated to write all activities in the Console, EventLog and File… See screen shots below…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Quartz.Net-configure_C58F/SNAGHTML2556958.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML2556958" border="0" alt="SNAGHTML2556958" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Quartz.Net-configure_C58F/SNAGHTML2556958_thumb.png" width="903" height="375" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Figure – Quartz.Net Windows Service logging all activity to the event log&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Quartz.Net-configure_C58F/SNAGHTML257dd4f.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML257dd4f" border="0" alt="SNAGHTML257dd4f" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Quartz.Net-configure_C58F/SNAGHTML257dd4f_thumb.png" width="918" height="450" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Figure – Quartz.Net Windows Service logging all activity to the application log file&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Where is the output from log4Net ConsoleAppender? &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;As a default behaviour, the console isn't available in windows services, web services, windows forms. The output will simply be dismissed. Unless you are running the process interactively. Which you can do by firing up Quartz.Server.exe –i to see the output&lt;/font&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was fourth in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering &lt;em&gt;troubleshooting why a scheduled task hasn’t fired on Quartz.net windows service&lt;/em&gt;. &lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;All Quartz.Net specific blog posts can listed here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;&lt;u&gt;http://feeds.feedburner.com/TarunArora&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/151280.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx</guid>
            <pubDate>Sat, 17 Nov 2012 15:05:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/151280.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/151280.aspx</trackback:ping>
        </item>
        <item>
            <title>Quartz.Net Writing your first Hello World Job</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;In this blog post I’ll be covering,&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;01: A few things to consider before you should schedule a Job using Quartz.Net&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;02: Setting up your solution to use Quartz.Net API &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;03: Quartz.Net configuration&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;04: Writing &amp;amp; scheduling a hello world job with Quartz.Net &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;05: &lt;a href="http://sdrv.ms/RJy7I4" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Download Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; sample project and instructions &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you are new to Quartz.Net I would recommend going through,&lt;/font&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font size="3" face="Calibri"&gt;A &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;brief introduction to Quartz.net&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Walkthrough of &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Installing &amp;amp; Testing Quartz.Net as a Windows Service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;How to &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Configuring Logging for Quartz.Net windows service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;01 – A few things to consider before you should schedule a Job using Quartz.Net&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;To schedule a job to run on Quartz.Net windows service at the very minimum you need the 3 items listed below,&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3" face="Calibri"&gt;    - An instance of the scheduler service&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3" face="Calibri"&gt;    - A trigger&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3" face="Calibri"&gt;    - And last but not the least a job&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;But a few additional things that you should think about are… For example, if I wanted to schedule a script to run on the server, I should be jotting down answers to the below questions,&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     a. Considering there are multiple machines set up with Quartz.Net windows service, how can I choose the instance of Quartz.Net where I want my script to be run&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     b. What will trigger the execution of the job&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     c. How often do I want the job to run&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     d. Do I want the job to run right away or start after a delay or may be have the job start at a specific time&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     e. What will happen to my job if Quartz.Net windows service is reset&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     f. Do I want multiple instances of this job to run concurrently&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;     g. Can I pass parameters to the job being executed by Quartz.Net windows service&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;02 – Setting up your solution to use Quartz.Net API&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;1. Create a new C# Console Application project and call it “HelloWorldQuartzDotNet” and add a reference to Quartz.Net.dll. I use the NuGet Package Manager to add the reference. This can be done by right clicking references and choosing Manage NuGet packages, from the Nuget Package Manager choose Online from the left panel and in the search box on the right search for Quartz.Net. Click Install on the package “Quartz” (Screen shot below).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/image_2.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/image_thumb.png" width="431" height="362" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Figure – Adding Quartz.Net reference to my project via Nuget Package Manager&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML3af4a28b.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3af4a28b" border="0" alt="SNAGHTML3af4a28b" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML3af4a28b_thumb.png" width="847" height="310" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Figure – Searching for Quartz.Net reference in Nuget Package Manager&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/image_4.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/image_thumb_1.png" width="436" height="457" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Figure – Quartz reference added to my project via Nuget Package Manager&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;2. Right click the project and choose Add New Item. Add a new Interface and call it ‘IScheduledJob.cs’. Mark the Interface public and add the signature for Run. Your interface should look like below.&lt;/font&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; HelloWorldQuartzDotNet
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IScheduledJob
    {
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Run();
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;3. Right click the project and choose Add new Item. Add a class and call it ‘Scheduled Job’. Use this class to implement the interface ‘IscheduledJob.cs’. Look at the pseudo code in the implementation of the Run method.&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; HelloWorldQuartzDotNet
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; ScheduledJob : IScheduledJob
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Run()
        {

            &lt;span class="rem"&gt;// Get an instance of the Quartz.Net scheduler&lt;/span&gt;

            &lt;span class="rem"&gt;// Define the Job to be scheduled&lt;/span&gt;

            &lt;span class="rem"&gt;// Associate a trigger with the Job&lt;/span&gt;

            &lt;span class="rem"&gt;// Assign the Job to the scheduler&lt;/span&gt;

            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotImplementedException();
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I’ll get into the implementation in more detail, but let’s look at the minimal configuration a sample configuration file for Quartz.Net service to work.&lt;/font&gt;&lt;/p&gt;

&lt;h3&gt;&lt;font size="4" face="Calibri"&gt;03 – HelloWorldQuartzDotNet configuration file&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;In the App.Config file copy the below configuration&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&amp;lt;?xml version=&lt;span class="str"&gt;"1.0"&lt;/span&gt; encoding=&lt;span class="str"&gt;"utf-8"&lt;/span&gt; ?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&lt;span class="str"&gt;"quartz"&lt;/span&gt; 
             type=&lt;span class="str"&gt;"System.Configuration.NameValueSectionHandler, 
             System, Version=1.0.5000.0,Culture=neutral, 
             PublicKeyToken=b77a5c561934e089"&lt;/span&gt; /&amp;gt;
  &amp;lt;/configSections&amp;gt;
  &amp;lt;quartz&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.scheduler.instanceName"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"ServerScheduler"&lt;/span&gt; /&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.threadPool.type"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Quartz.Simpl.SimpleThreadPool, Quartz"&lt;/span&gt; /&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.threadPool.threadCount"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"10"&lt;/span&gt; /&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.threadPool.threadPriority"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"2"&lt;/span&gt; /&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.jobStore.misfireThreshold"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"60000"&lt;/span&gt; /&amp;gt;
    &amp;lt;add key=&lt;span class="str"&gt;"quartz.jobStore.type"&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Quartz.Simpl.RAMJobStore, Quartz"&lt;/span&gt; /&amp;gt;
  &amp;lt;/quartz&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;As you can see in the configuration above, I have included the instance name of the quartz scheduler, the thread pool type, count and priority, the job store type has been defined as RAM. You have the option of configuring that to ADO.NET JOB store. More details &lt;/font&gt;&lt;a href="http://quartznet.sourceforge.net/tutorial/lesson_9.html" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. &lt;/font&gt;&lt;/p&gt;

&lt;h3&gt;&lt;font size="4" face="Calibri"&gt;04 – Writing &amp;amp; scheduling a hello world job with Quartz.Net Windows Service&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Once fully implemented the ScheduleJob.cs class should look like below. I’ll walk you through the details of the implementation…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- GetScheduler() uses the name of the quartz.net and listens on localhost port 555 to try and connect to the quartz .net windows service. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- Run() an attempt is made to start the scheduler in case it is in standby mode&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- I have defined a job “WriteHelloToLog” (that’s the name of the job), this job belongs to the group “IT”. Think of group as a logical grouping feature. It helps you bucket jobs into groups. Quartz.Net gives you the ability to pause or delete all jobs in a group (We’ll look at that in some of the future posts). I have requested for recovery of this job in case the quartz.net service fails over to the other node in the cluster. The jobType is “HelloWorldJob”. This is the class that would be called to execute the job. More details on this below…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- schd.CheckExists will check to ensure that the job WriteHelloToLog doesn’t already exist. If it does, I’ll delete the job and allow you to recreate the same job. I have added this code just as a precaution to avoid you running into the exception &lt;em&gt;“Quartz.ObjectAlreadyExistsException: Unable to store Job with name: 'WriteHelloWorldToLog' and group: 'IT', because one already exists with this identification.”&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- I have defined a trigger for my job. I have called the trigger “WriteHelloToLog”. The Trigger works on the cron schedule “0 0/1 * 1/1 * ? *” which means fire the job once every minute. I would recommend that you look at &lt;/font&gt;&lt;a href="http://www.cronmaker.com"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;www.cronmaker.com&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt; a free and great website to build and parse cron expressions. The trigger has a priority 1. So, if two jobs are run at the same time, this trigger will have high priority and will be run first.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- Use the Job and Trigger to schedule the job. This method returns a datetime offeset. It is possible to see the next fire time for the job from this variable.&lt;/font&gt; &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Specialized;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz.Impl;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; HelloWorldQuartzDotNet
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; ScheduledJob : IScheduledJob
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Run()
        {
            &lt;span class="rem"&gt;// Get an instance of the Quartz.Net scheduler&lt;/span&gt;
            var schd = GetScheduler();

            &lt;span class="rem"&gt;// Start the scheduler if its in standby&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!schd.IsStarted)
                schd.Start();

            &lt;span class="rem"&gt;// Define the Job to be scheduled&lt;/span&gt;
            var job = JobBuilder.Create&amp;lt;HelloWorldJob&amp;gt;()
                .WithIdentity(&lt;span class="str"&gt;"WriteHelloToLog"&lt;/span&gt;, &lt;span class="str"&gt;"IT"&lt;/span&gt;)
                .RequestRecovery()
                .Build();

            &lt;span class="rem"&gt;// Associate a trigger with the Job&lt;/span&gt;
            var trigger = (ICronTrigger)TriggerBuilder.Create()
                .WithIdentity(&lt;span class="str"&gt;"WriteHelloToLog"&lt;/span&gt;, &lt;span class="str"&gt;"IT"&lt;/span&gt;)
                .WithCronSchedule(&lt;span class="str"&gt;"0 0/1 * 1/1 * ? *"&lt;/span&gt;) &lt;span class="rem"&gt;// visit http://www.cronmaker.com/ Queues the job every minute&lt;/span&gt;
                .StartAt(DateTime.UtcNow)
                .WithPriority(1)
                .Build();

            &lt;span class="rem"&gt;// Validate that the job doesn't already exists&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (schd.CheckExists(&lt;span class="kwrd"&gt;new&lt;/span&gt; JobKey(&lt;span class="str"&gt;"WriteHelloToLog"&lt;/span&gt;, &lt;span class="str"&gt;"IT"&lt;/span&gt;)))
            {
                schd.DeleteJob(&lt;span class="kwrd"&gt;new&lt;/span&gt; JobKey(&lt;span class="str"&gt;"WriteHelloToLog"&lt;/span&gt;, &lt;span class="str"&gt;"IT"&lt;/span&gt;));
            }

            var schedule = schd.ScheduleJob(job, trigger);
            Console.WriteLine(&lt;span class="str"&gt;"Job '{0}' scheduled for '{1}'"&lt;/span&gt;, &lt;span class="str"&gt;"WriteHelloToLog"&lt;/span&gt;, schedule.ToString(&lt;span class="str"&gt;"r"&lt;/span&gt;));
        }

        &lt;span class="rem"&gt;// Get an instance of the Quartz.Net scheduler&lt;/span&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IScheduler GetScheduler()
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                var properties = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameValueCollection();
                properties[&lt;span class="str"&gt;"quartz.scheduler.instanceName"&lt;/span&gt;] = &lt;span class="str"&gt;"&lt;font style="background-color: #ffff00"&gt;ServerScheduler&lt;/font&gt;"&lt;/span&gt;;

                &lt;span class="rem"&gt;// set remoting expoter&lt;/span&gt;
                properties[&lt;span class="str"&gt;"quartz.scheduler.proxy"&lt;/span&gt;] = &lt;span class="str"&gt;"true"&lt;/span&gt;;
                properties[&lt;span class="str"&gt;"quartz.scheduler.proxy.address"&lt;/span&gt;] = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"tcp://{0}:{1}/{2}"&lt;/span&gt;, &lt;span class="str"&gt;"localhost"&lt;/span&gt;, &lt;span class="str"&gt;"&lt;font style="background-color: #ffff00"&gt;555&lt;/font&gt;"&lt;/span&gt;,
                                                                             &lt;span class="str"&gt;"&lt;font style="background-color: #ffff00"&gt;QuartzScheduler&lt;/font&gt;"&lt;/span&gt;);

                &lt;span class="rem"&gt;// Get a reference to the scheduler&lt;/span&gt;
                var sf = &lt;span class="kwrd"&gt;new&lt;/span&gt; StdSchedulerFactory(properties);

                &lt;span class="kwrd"&gt;return&lt;/span&gt; sf.GetScheduler();

            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                Console.WriteLine(&lt;span class="str"&gt;"Scheduler not available: '{0}'"&lt;/span&gt;, ex.Message);
                &lt;span class="kwrd"&gt;throw&lt;/span&gt;;
            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;The above &lt;font style="background-color: #ffff00"&gt;highlighted values&lt;/font&gt; have been taken from the Quartz.config file, this file is available in the Quartz.net server installation directory.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Implementation of my HelloWorldJob Class below. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;The HelloWorldJob class gets called to execute the job “WriteHelloToLog” using the once every minute trigger set up for this job. The HelloWorldJob is a class that implements the interface IJob. I’ll walk you through the details of the implementation…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- &lt;font color="#0000ff"&gt;If you don’t include an empty constructor in the HelloWorldJob class then Quartz.Net windows service will not be able to create an instance of this class to execute your job. I learned this the hard way #JustSaying&lt;/font&gt; &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-Inlove" alt="In love" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/wlEmoticon-Inlove_2.png" /&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;- &lt;em&gt;context&lt;/em&gt; is passed to the method execute by the quartz.net scheduler service. This has everything you need to pull out the job, trigger specific information. F&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;or example. I have pulled out the value of the jobKey name, the fire time and next fire time.&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Common.Logging;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Quartz;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; HelloWorldQuartzDotNet
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; HelloWorldJob : IJob
    {

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ILog Log = LogManager.GetLogger(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(HelloWorldJob));

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;
        &lt;span class="rem"&gt;/// Empty constructor for job initilization&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;para&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Quartz requires a public empty constructor so that the&lt;/span&gt;
        &lt;span class="rem"&gt;/// scheduler can instantiate the class whenever it needs.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/para&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; HelloWorldJob()
        {
            
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute(IJobExecutionContext context)        
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                Log.DebugFormat(&lt;span class="str"&gt;"{0}****{0}Job {1} fired @ {2} next scheduled for {3}{0}***{0}"&lt;/span&gt;, 
                                                                        Environment.NewLine,
                                                                        context.JobDetail.Key,
                                                                        context.FireTimeUtc.Value.ToString(&lt;span class="str"&gt;"r"&lt;/span&gt;), 
                                                                        context.NextFireTimeUtc.Value.ToString(&lt;span class="str"&gt;"r"&lt;/span&gt;));


                Log.DebugFormat(&lt;span class="str"&gt;"{0}***{0}Hello World!{0}***{0}"&lt;/span&gt;, Environment.NewLine);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                Log.DebugFormat(&lt;span class="str"&gt;"{0}***{0}Failed: {1}{0}***{0}"&lt;/span&gt;, Environment.NewLine, ex.Message);
            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I’ll add a call to call the scheduler in the Main method in Program.cs&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; HelloWorldQuartzDotNet
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
               &lt;span class="rem"&gt;// Infinite loop, so that the console doesn't close on you&lt;/span&gt;
                &lt;span class="kwrd"&gt;while&lt;/span&gt; (&lt;span class="kwrd"&gt;true&lt;/span&gt;)
                {
                    var sj = &lt;span class="kwrd"&gt;new&lt;/span&gt; ScheduledJob();
                    sj.Run();

                    Console.WriteLine(&lt;span class="str"&gt;@"{0}Check Quartz.net\Trace\application.log.txt for Job updates{0}"&lt;/span&gt;,
                                        Environment.NewLine);

                    Console.WriteLine(&lt;span class="str"&gt;"{0}Press Ctrl^C to close the window. The job will continue "&lt;/span&gt; +
                                        &lt;span class="str"&gt;"to run via Quartz.Net windows service, "&lt;/span&gt; +
                                        &lt;span class="str"&gt;"see job activity in the Quartz.Net Trace file...{0}"&lt;/span&gt;,
                                        Environment.NewLine);

                    Thread.Sleep(10000 * 100000);    
                }
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                Console.WriteLine(&lt;span class="str"&gt;"Failed: {0}"&lt;/span&gt;, ex.Message);
                Console.ReadKey();
            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I am going to hit F5 to fire up “HelloWorldQuartzDotNet” project… Let’s see the Quartz.Net job scheduling in action…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML206c76d.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML206c76d" border="0" alt="SNAGHTML206c76d" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML206c76d_thumb.png" width="717" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;font size="2"&gt;&lt;strong&gt;Figure – The program has run as expected. The program has successfully scheduled the “WriteHelloWorldToLog” job to the Quartz.Net Scheduler. As you can see the job has been scheduled to start at ‘Sat, 17 Nov 2012 13:19:00 GMT’&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Let’s open up the C:\Program Files (x86)\Quartz.Net\Trace\Application.log.txt file to see Quartz.Net scheduler activity…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;strong&gt;Note – If you can’t see the log file, then you don’t have logging for Quartz.Net enabled, follow the instructions &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML20d5a1b.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML20d5a1b" border="0" alt="SNAGHTML20d5a1b" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/Qua.Net-Writing-your-first-Hello-World-J_11D33/SNAGHTML20d5a1b_thumb.png" width="906" height="534" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Figure – The Quartz. Net application log file has the execution details of my “WriteHelloWorldToLog” job. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;h3&gt;&lt;font size="4" face="Calibri"&gt;05 – Download Quartz.Net sample project and instructions &lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;I have packaged the sample that I created for this blogpost and uploaded it to my skydrive. You can download the sample quartz.net helloworld solution from &lt;a href="http://sdrv.ms/T2hq9O" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;Once you have downloaded and unpackaged the solution follow the steps below to get it to work,&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;1. Build the solution and resolve any compilation errors. You might run into compilation issues if you don’t have .net 4 installed on your machine. Ensure that Quartz.dll, Common.Logging.dll, Common.Logging.log4Net.dll and log4Net.dll are correctly available under references.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;2. Once successfully compiled, go to the bin folder, copy “HelloWorldQuartzDotNet.exe” and paste it to the Quartz.Net windows service directory. In the example above, the Quartz.Net windows service directory is “C:\Program Files (x86)\Quartz.Net”&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;3. Stop the Quartz.Net service from Services.msc and start the service again. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;4. Hit F5 on the “HelloWorldQuartzDotNet” project in Visual Studio. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;And… that’s it… &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was third in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering &lt;em&gt;how to configure logging for the Quartz.net windows service&lt;/em&gt;. &lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;All Quartz.Net specific blog posts can listed here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://feeds.feedburner.com/TarunArora&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/151278.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx</guid>
            <pubDate>Sat, 17 Nov 2012 01:07:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/151278.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/151278.aspx</trackback:ping>
        </item>
        <item>
            <title>Install Quartz.Net as a windows service and Test installation</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;In this blog post I’ll be covering,&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;01: Where to download Quartz.net from&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;02: How to install Quartz.net as a Windows service&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;03: Test the Quartz.net Installation&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you are new to Quartz.Net I would recommend going through,&lt;/font&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font size="3" face="Calibri"&gt;A brief &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Introduction to Quartz.net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/font&gt;&lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Writing &amp;amp; Scheduling your &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;First HelloWorld job with Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt; &lt;/font&gt;&lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;How to &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Configuring Logging for Quartz.Net windows service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;01 – Where to download Quartz.net?&lt;/font&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://sourceforge.net/projects/quartznet/files/quartznet/" href="http://sourceforge.net/projects/quartznet/files/quartznet/"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;&lt;u&gt;http://sourceforge.net/projects/quartznet/files/quartznet/&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt; &lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;     &lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_2.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_thumb.png" width="488" height="286" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Currently version  Quartz.Net 2.0.1 is the recommended download version. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;02 – How to install Quartz.net as a Windows service&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;        &lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a596c9a.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3a596c9a" border="0" alt="SNAGHTML3a596c9a" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a596c9a_thumb.png" width="890" height="325" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Go to the download location and unzip the Quartz.net package&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Navigate to the folder Quartz.Net \ Server \ bin – This is where you will find different .net version installers of the quartz.net packages. For example in the screen shot above, you can see the Quartz.net .net 3.5 and .net 4 packages. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Open up the Quartz.net .net 4.0 folder, this folder contains the files you need to install Quartz.net as a windows service&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Copy the contents of the folder Downloads\Quartz.NET-2.0.1\server\bin\4.0 to the folder %program files%\Quartz.net&lt;/font&gt;       &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a600e06.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3a600e06" border="0" alt="SNAGHTML3a600e06" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a600e06_thumb.png" width="889" height="295" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;  &lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;5. Open up a new CMD as an administrator and run the below command to install Quartz.net as a windows service&lt;/font&gt;&lt;/p&gt;      &lt;blockquote&gt;       &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;em&gt;&lt;strong&gt;/&amp;gt;&lt;/strong&gt; Quartz.Server.exe install&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;     &lt;/blockquote&gt;      &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a63debd.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3a63debd" border="0" alt="SNAGHTML3a63debd" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a63debd_thumb.png" width="701" height="321" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;6. How do I know that Quartz.Net service has installed as a Windows service?&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Go to run prompt and type ‘services.msc’ you should now see all the windows services installed on your machine. Navigate down to look for Quartz.Net. The service installs itself as an automatic startup Type and log on as ‘Local System’. You can easily change this to your prefer account that you would like to run the service as.&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a66fb22.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3a66fb22" border="0" alt="SNAGHTML3a66fb22" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a66fb22_thumb.png" width="896" height="252" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;If you wanted to name the Quartz service something else then that’s also possible… &lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_4.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_thumb_1.png" width="470" height="412" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;      &lt;blockquote&gt;       &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;em&gt;Can I change the default display name of the quartz.net windows service? &lt;/em&gt;&lt;/font&gt;&lt;/p&gt;     &lt;/blockquote&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Yes, you can! Navigate to C:\Program Files (x86)\Quartz.Net\ and open up the config file ‘quartz.config’&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- You can change the instance name &lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- You can change the default thread count of 10&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;- The port that the service listens to (by default this is port 555)&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a6dd4be.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3a6dd4be" border="0" alt="SNAGHTML3a6dd4be" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/SNAGHTML3a6dd4be_thumb.png" width="713" height="332" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;A blog post on more configuration details can be found &lt;a href="http://jvilalta.blogspot.co.uk/2011/03/how-does-quartznet-configuration-work.html" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;.&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4" face="Calibri"&gt;03 – Test Quartz.Net windows service installation&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;So, I have installed Quartz.Net as a windows service, how do I test whether my installation has been successful. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Open up cmd as an administrator and run the below command, &lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;em&gt;&lt;strong&gt;C:\Program Files (x86)\Quartz.Net&amp;gt;&lt;/strong&gt; Quartz.Server.exe –i&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_8.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/Windows-Live-Writer/59c497936e8a_1066E/image_thumb_3.png" width="697" height="647" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Since by default the Quartz.net windows service writes INFO level diagnostics (this can be changed from Quartz.Server.exe.config) you should see the service information show up on the console. For instance in the example above I can see that the service is running in a NON CLUSTERED mode, its currently not started and is currently in standby mode with 0 number of jobs executed so far…&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was second in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering &lt;em&gt;how to run your first scheduled task using Quartz.net windows service&lt;/em&gt;. &lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;All Quartz.Net specific blog posts can listed here&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;&lt;u&gt;http://feeds.feedburner.com/TarunArora&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/151274.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx</guid>
            <pubDate>Fri, 16 Nov 2012 20:02:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/151274.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/151274.aspx</trackback:ping>
        </item>
        <item>
            <title>Walkthrough: Scheduling jobs using Quartz.net &amp;ndash; Part 1: What is Quartz.Net?</title>
            <category>Quartz.Net</category>
            <link>http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx'&gt;http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://quartznet.sourceforge.net/"&gt;&lt;i&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Quartz.NET&lt;/font&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;font size="3" face="Calibri"&gt; is a full-featured, open source enterprise job scheduling system written in .NET platform that can be used from smallest apps to large scale enterprise systems. &lt;/font&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Suggested Further Reading&lt;/font&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Walkthrough of &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Installing &amp;amp; Testing Quartz.Net as a Windows Service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;How to &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;Configuring Logging for Quartz.Net windows service&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;font size="3" face="Calibri"&gt;Writing &amp;amp; Scheduling your &lt;/font&gt;&lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-writing-your-first-hello-world-job.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;First Hello World job with Quartz.Net&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;What is the problem that we trying to address?&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;I want to schedule the execution of a task but only when something happens. Let’s call that something a trigger, so... if the trigger is met =&amp;gt; execute the task. &lt;/font&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/WalkthroughSchedulingjobsusingQuartz.Net_1413B/image_2.png"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img style="border-right-width: 0px; margin: 5px 10px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/WalkthroughSchedulingjobsusingQuartz.Net_1413B/image_thumb.png" width="143" height="124" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt; &lt;i&gt;Sounds simple, why not use windows task scheduler for this?&lt;/i&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Well, windows task scheduler is great for tasks where the trigger can be easily defined. With windows task scheduler will you be able to schedule a task to run on every working day according to the UK calendar (exclude all weekends &amp;amp; bank holidays) without either writing the logic for day check in the task or a wrapper script calling into the task. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;The task should just contain the execution logic and should not have anything to do with the schedule for execution; Quartz.net allows you to achieve this and lots more. A quartz.net trigger gives you the flexibility for task invocation based on the following triggers, &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Calibri"&gt;1. at a certain time of day (to the millisecond) &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;2. on certain days of the week &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;3. on certain days of the month &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;4. on certain days of the year &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;5. not on certain days listed within a registered Calendar (such as business holidays) &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;6. repeated a specific number of times &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;7. repeated until a specific time/date &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;8. repeated indefinitely &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Calibri"&gt;9. repeated with a delay interval &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Did 8 – repeat indefinitely just ring a bell? I’ll be covering that in the future post.&lt;/font&gt; &lt;/p&gt;  &lt;h3&gt;Using Quartz.net as a windows service&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;You can have Quartz.net run as a standalone instance within its own .NET virtual machine instance via .NET Remoting. Let’s take a look at typical application architecture. In the figure below, I have the application tier set up on Machine 1, database set up on Machine 2 and Quartz.net set up on Machine 3 which is normally the architecture for most (if not all) enterprise applications.&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/WalkthroughSchedulingjobsusingQuartz.Net_1413B/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://gwb.blob.core.windows.net/tarunarora/WindowsLiveWriter/WalkthroughSchedulingjobsusingQuartz.Net_1413B/image_thumb_1.png" width="450" height="268" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="1"&gt;&lt;strong&gt;Figure 1 -  Typical Application architecture while using Quartz.net as a windows service&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;What other options do I have if I don’t want to use Quartz.net?&lt;/h3&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;Quartz.net is just one of the many job scheduling services. Have a look at this comprehensive list of free and paid enterprise job scheduling software along with their feature comparison. &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_job_scheduler_software"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;&lt;u&gt;http://en.wikipedia.org/wiki/List_of_job_scheduler_software&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;This was first in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering &lt;em&gt;how to Install Quartz.net as a windows service&lt;/em&gt;. &lt;a href="http://geekswithblogs.net/TarunArora/category/13586.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;All Quartz.Net specific blog posts can listed here&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;/font&gt;&lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://feeds.feedburner.com/TarunArora&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;. Stay tuned!&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/149279.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tarun Arora</dc:creator>
            <guid>http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx</guid>
            <pubDate>Tue, 10 Apr 2012 20:50:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/TarunArora/archive/2012/04/10/walkthrough-scheduling-jobs-using-quartz.net-ndash-part-1-what-is.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/149279.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/149279.aspx</trackback:ping>
        </item>
    </channel>
</rss>