Friday, November 21, 2014

Timer job errors and solutions in SharePoint

Introduction


In this post we will see what the various errors that come while handling Timer Job in SharePoint.
These errors are sometime common for many developers but could take time to resolve. Hope this will resolve your errors and save your time.
Don’t miss the article how to create Timer job for specific site in SharePoint

What are the points that are covered

  • Frequent errors that come up with Timer job and their resolution



Error: Access denied while creating/deleting the Timer job from the feature


We may encounter the following error while activating the feature from UI and inside the feature activation code we have code to create/delete Timer job


Access denied.
at Microsoft.SharePoint.Administration.SPPersistedObject.Update()
at Microsoft.SharePoint.Administration.SPJobDefinition.Update()
at xxx.xxx.<>c__DisplayClass1.b__0()



Solution


Activate the feature from command prompt rather than from the UI and we won’t be getting the above error
Following is the quick code to activate or deactivate the feature by stsadm


Activating the feature
stsadm -o activatefeature -fileName TimerJobFeatureReceiver\Feature.xml -url http://adicodes/sites/mysite -force


Deactivating the feature
stsadm -o deactivatefeature -fileName TimerJobFeatureReceiver\Feature.xml -url http://adicodes/sites/mysite -force



Error: Timer job running more than once


This is one common error many users face. For example, we have written sending email while Timer job executes. It will be so annoying if users says that they got more than one email with same content and time stamp.

Solution
This duplicate job running behavior is due to the SPJobLockType in the constructor.
Suppose if we are using this constructor

public TimerJob(SPWebApplication webApp): base("TimerJob", webApp, null, SPJobLockType.ContentDatabase)
{
this.Title = "TimerJob";
}

Timer job will execute more than once if the web application for which Timer Job is associated has more than one content database
We can check the number of content databases for the webapplication from central admin site
Go to http://centraladminurl/_admin/CNTDBADM.aspx. Select the webapplication and we can check the number of content databases associated with it

Change the SPJobLockType enumerator value from ContentDatabase to Job in the constructor as follows

public TimerJob(SPWebApplication webApp): base("TimerJob", webApp, null, SPJobLockType.Job)
{
this.Title = "TimerJob";
}


Now, the Timer job will execute only once though there are multiple content databases associated

You can check what the SPJobLockType enumeration is for at
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjoblocktype.aspx


Error: access denied While Updating the timer Job

override bellow method in Job definition class before or after execute method

protected override bool HasAdditionalUpdateAccess()
        {
            return true;
        }
 
protected override Execute()
{

}

Error: Latest code is not running after Timer job is deployed


This is also one common error many users face. They get surprised why the latest deployed Timer job code is not running and sometimes get the
following error

OWSTIMER.EXE (0x0AAC) 0x0BF0 Windows SharePoint Services Topology 7i0u High SharePoint cannot deserialize an object of type Pages.SurveySiteEmailJob, Pages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c475c2fd38120dac on this machine.
This typically occurs because the assembly containing this type is not installed on this machine.
In this case, this message can be safely ignored. Otherwise, the assembly needs to be installed on this machine in a location that can be discovered by the .NET Framework.


Solution


Just restart the timer service
How to restart the Timer job service in SharePoint 2010

Go to Start > Run (Windows Key+R)
Type Services.msc and hit enter or click on OK.
Under services locate “SharePoint 2010 Timer”.
Stop and Start service

or
with command line code
net stop “SharePoint 2010 Timer”
net start “SharePoint 2010 Timer”

How to restart the Timer job service in SharePoint 2007
Go to Start > Run (Windows Key+R)
Type Services.msc and hit enter or click on OK.
Under services locate “Windows SharePoint Services Timer”.
Stop and Start service
or
with command line code
net stop “Windows SharePoint Services Timer”
net start “Windows SharePoint Services Timer”

Conclusion


We might have tried a lot for figuring out what is the cause of the error. Hope the the above resolutions will save your time.
You can add up some more bugs if you encounter, so that it will be helpful for any SharePointers:)