Durante el proyecto que estamos llevando a cabo en la empresa para la que trabajo, tuvimos que hacer un Timer Job. La funcionalidad que este tiene es el de mandar un Newsletter a las personas que se suscribieron a ciertos sitios. Basicamente el Timer Job recorre todos los sitios creados en una web application, busca los usuarios subscriptos y manda las noticias. Después de terminar el desarrollo, lleve el timer job para deployarlo en una maquina que utilizamos como integración.
Cuando lo instalo y pruebo andaba, pero me mandaba muchísimos mails de más. Cuando voy a mirar el history log aparecía como que se ejecutaba múltiples veces.
Me puse a investigar y leyendo un poco descubrí que en la creación del Timer Job, hay un parámetro que se llama SPJobLockType.
Este parametro puede estar entre los siguientes valores:
SPJobLockType.None: El Timer Job se ejecuta en todas las maquinas del farm donde el servicio se instaló. A no se que lo asocie para ejecutarse en un server especifico, en cuyo caso ejecuta solo en ese.
SPJobLockType.ContentDatabase – Se ejecuta una vez por cada content database asociada a la web application.
SPJobLockType.Job – Se ejecuta solo en una maquina del farm.
Como yo necesitaba que se ejecute solo un vez en todo el farm, utilicé SPJobLockType.Job y problema resuelto.
Espero les sirva para el desarrollo de sus Timer Jobs.
Nos leemos…