2010-03-13 5 views
1

J'ai une petite application Web qui génère des fichiers PDF en tant que rapport. J'essaye de supprimer ces fichiers PDF générés après 10 secondes qu'ils sont générés. Ce que je veux faire est de lire un dossier avec des fichiers PDF toutes les 10 secondes, et supprimer tous les fichiers PDF dans ce dossier.Simulation du service Windows avec ASP.NET

J'ai lu ceci post of Easy Background Tasks in ASP.NET. Le code suivant est la version VB.

Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    AddTask("DoStuff", 10) 
End Sub 

Private Sub AddTask(ByVal name As String, ByVal seconds As Integer) 
    OnCacheRemove = New CacheItemRemovedCallback(CacheItemRemoved) 
    HttpRuntime.Cache.Insert(name, seconds, Nothing, DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, _ 
    OnCacheRemove) 
End Sub 

Public Sub CacheItemRemoved(ByVal k As String, ByVal v As Object, ByVal r As CacheItemRemovedReason) 
    ' do stuff here if it matches our taskname, like WebRequest 

    DeletePDFilesInFoler() 

    ' re-add our task so it recurs 
AddTask(k, Convert.ToInt32(v)) 

End Sub

Mais je suis arrivé cette erreur

délégué 'System.Web.Caching.CacheItemRemovedCallback' nécessite une expression 'AddressOf' ou expression lambda comme seul argument à son constructeur.

Si ce code fonctionne, où devrais-je le mettre. Droit, maintenant je le mets dans la page maître. Comment faire pour sortir cette erreur?

Merci

+0

votre CacheItemRemovedCallback a besoin d'un délégué (pointeur de fonction) à la fonction qu'il désigne. Pas seulement le nom de la fonction, comme c'est le cas maintenant. –

Répondre

1

plutôt que de les supprimer sur un calendrier, pourquoi ne pas les vieux fichiers PDF et de les supprimer à chaque fois qu'un fichier PDF est généré?

Pseudo-code:

/* Clean up old PDFs */ 
If Not StaticCleaningUpPDFsNow Then 
    // No other reports generating simultaneously and trying to delete old PDFs 
    StaticCleaningUpPDFsNow = True 
    For each f in (reportfolder\*.pdf) 
     If f.DateCreated.AddSeconds(10) < Now Then f.Delete 
    Next 
    StaticCleaningUpPDFsNow = False 
End If 
/* Create PDF for the current report */ 
... 

Les frais généraux pour rechercher des fichiers dans un dossier et supprimer quelques est incroyablement petit, et le faire à la demande est un bien meilleur usage des ressources, sans les hacks autour de cache expirations (et les cas de bordure qui peuvent en résulter).

+0

Je prends ce conseil. Je vous remercie. J'aimerais que ce soit si simple. –

1

L'erreur est dans le message d'erreur, vous êtes absent AddressOf. Essayez ceci:

OnCacheRemove = New CacheItemRemovedCallback(AddressOf CacheItemRemoved) 
+0

Sam, merci pour cela. Plus d'erreur. Mais je prends le conseil de richardtallent. –

Questions connexes