Actualmente estoy trabajando en un TimerJob que hace una cierta gestión de colecciones de sitios. Cuando el trabajo se ejecuta busca en una lista para recuperar la URL de una colección de sitios, llama al SPSite.Exists()
para verificar si el sitio aún existe o no.SPSite.Exists() devuelve verdadero aunque la colección de sitios no existe
Para probar la TimerJob elimino una colección de sitios, pero dejó la entrada correspondiente en la lista. Entonces comienzo el TimerJob y paso por su código en modo de depuración. Cuando se trata del punto para verificar si el sitio existe, SPSite.Exists()
devuelve verdadero.
Cuando ejecuto TimerJob por segunda vez para la misma colección de sitios, el método SPSite.Exists()
devuelve falso como debería.
Así que ahora me pregunto por qué SPSite.Exists()
devuelve el resultado falso cuando corro el trabajo por primera vez. ¿Podría ser causado por el almacenamiento en caché?
cuando corro el mismo código fuera de la TimerJob SPSite.Exists()
devuelve el resultado correcto en todo momento.
ACTUALIZACIÓN
Así que he hecho un poco más la depuración y parece que este problema es realmente causado por algún mecanismo de caché, ya que no se produce cuando el servicio de temporizador de Windows SharePoint Services se ha reiniciado después de la la colección del sitio de prueba se ha eliminado y antes de que se haya iniciado TimerJob.
Por el momento no puedo imaginar otra solución que intentar acceder al sitio eliminado y atrapar la excepción de que sea destruida para determinar si el sitio realmente existe.
ACTUALIZACIÓN 2
Después de algunas pruebas más me di cuenta de que el problema no se produce para la primera llamada de SPSite.Exists() (dentro del TimerJob) después de que el servicio de temporizador se reinicia. La segunda llamada (para una colección de sitios diferente) todavía conduce al problema conocido.
ACTUALIZACIÓN 3
En este momento estoy usando un truco feo para resolver mi problema. Cuando SPSite.Exists() devuelve verdadero aunque en realidad no existe, creo un objeto SPSite y trato de provocar una excepción FileNotFoundException llamando a su propiedad de uso. Cuando surgen las excepciones, sé que el sitio no existe. Por extraño que parezca después de que se lanzó la excepción SPSite.Exists() devuelve el resultado correcto (falso).
¿Alguna otra sugerencia por ahí?
adiós, Flo
Comparado con mi solución (Actualización 3), su solución evita detectar una excepción. Me gusta esto. Entonces esto sería una mejora para mi código. – Flo