SPService Class

Represents a farm-wide service.

Namespace:  Microsoft.SharePoint.Administration
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)
Available in Sandboxed Solutions: No

[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel = true)]
[SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel = true)]
public class SPService : SPPersistedUpgradableObject

To return the parent service of a service instance, use the Service property of the SPServiceInstance class. Use the Services property of the SPFarm class to return an SPServiceCollection object that represents the collection of services on the server farm. Use an indexer to return a single service from the collection using the GUID that identifies the service. For example, if the collection is assigned to a variable named myServices, use myServices[index] in C#, or myServices(index) in Visual Basic, where index is the GUID that identifies the service.To retrieve a single service from the collection by name, use the GetValue method. For example, if the collection is assigned to a variable named myServices, use myServices.GetValue<ServiceType>(name) in C#, or myServices.GetValue(ServiceType)(name) in Visual Basic, where ServiceType is the type of the service and name is the name that identifies the service.

The following example iterates through the timer jobs history for each service in the farm and reruns any timer jobs that have failed in the past hour.

DateTime oneHourAgo = DateTime.UtcNow.AddHours(-1);
List<Guid> rerunJobIds = new List<Guid>();
foreach (SPService service in SPFarm.Local.Services)
    foreach (SPJobHistory entry in service.JobHistoryEntries)
        // stop if the entry didn't occur in the last hour
        if (entry.EndTime < oneHourAgo)

        if (entry.Status == SPRunningJobStatus.Failed &&
            SPJobDefinition job = SPFarm.Local.GetObject(
                entry.JobDefinitionId) as SPJobDefinition;
            if (job != null)

                // don't rerun the same job twice.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.