SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010
-
22 nov. 2006 à 19:05
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010
-
24 nov. 2006 à 07:41
Bonjour,
Je travaille en ASP.NET 2 langageVB et VS2005
Je désire mettre en cache un dataset quand l'application démarre.Dans Sub Application_Start je fais:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
'1 je cree le dataset "
MonDataSet"
------
Je passe les détails
-----
'2. Je le recopie dans un fichier Xml (Qui sera actualisé quand les données changent : pour ce cas, rarement), du répertoire "CacheXml"
("tarifs", dsTarifs, New CacheDependency(Server.MapPath("CacheXml/ CacheMonDataSet.xml")))
Eh bien cette instruction qui marchait parfaitement dans une page quelconque n'est pas autorisée dans le global.asax....
Je me la fait souligner en bleu avec le verdict :
Erreur 1 Une référence à un membre non partagé requiert une référence d'objet. Pourquoi ? et comment résoudre ce problème?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 23 nov. 2006 à 21:52
Salut,
Cache dans la page est une propriété de l'objet Page qui est une méthode type System.Web.Caching.Cache
dans global.asax, Cache est le type System.Web.Caching.Cache (mais pas une instance) or Insert n'est pas une méthode static (shared) mais une méthode d'instance donc il te faut une instance de l'objet Cache pour Insérer qqchose dans le cache.
Mais le code Global.asax est une instance de HttpApplication (j'ai un doute la mais je suis trop crevé pour vérifier :p) et dans cet objet tu as la méthode Context qui est une instance de HttpContext qui contient une propriété Cache qui est une instnce de ... (suspens) System.Web.Caching.Cache ... donc dans ton global.asax tu peux faire this.Context.Cache.Insert ... Le truc que je ne suis pas sur et que je me souviens plus quand cet objet est instancié l'évenement application_start est vraiment le tout début de l'application donc il se peut que cet objet soit pas encore instancié (mais je pense que oui)
En ce qui concerne le message d'erreur, ca vient du fait que tu appelles une méthode d'instance comme une méthode static
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 23 nov. 2006 à 15:51
Server.MapPath marche parfaitement, j'en ai un juste avant qui fonctionne. c'est le cache.insert qui pose pb, mais tu as raison, les arguments en posent peut-être un aussi..
@+Gilles
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 23 nov. 2006 à 17:49
Au secours, les théoriciens, je ne comprends pas l'erreur renvoyée !
Une référence à un membre non partagé requiert une référence d'objet. une piste par pitié !
@+G
Vous n’avez pas trouvé la réponse que vous recherchez ?
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 24 nov. 2006 à 07:41
Bonjour
un grand merci pour ta réponse détaillée.
effectivement, en tête de la page de code du global.asax, il y a:
Public Class [Global]
Inherits System.Web.HttpApplication
Comme je suis en VB j'ai mis Me.Context.Cache.Insert ... et ça va bien.
A noter la soluce de rechange: Faire remplir le cache sur la première page avec la condition:
if Ctype(Cache("tarifs"),DataSet) is Nothing then
---remplir le cache---
end if