2010-02-09 14 views
1
état

J'utilise Asp.net 3.5 et C#Comment ajouter un type de System.Xml.XmlDocument aux applications

Je dois ajouter un XmlDocument à mon état d'application de sorte que chaque fois que ma demande ne marche pas accéder au fichier XML sur mon système de fichiers, je vais ajouter ceci à la fonction Application_Start() dans Global.asax.cs

J'ajoute cela à l'état du système comme:

protected void Application_Start(Object sender, EventArgs e) 
{  
    string filePath = Server.MapPath("<path to my XML FILE>"); 
    XmlDocument xmlDoc = new XmlDocument(); 
    try 
    { 
     xmlTickerDoc.Load(filePath); 
    } 
    finally 
    { 
     HttpContext.Current.Application["xmlDoc"] = xmlDoc; 
    } 
} 

dans ce code je tente de charger le fichier xml et Si le fichier n'est pas chargé en raison d'un problème, alors je veux un XmlDocument nul.

-je accéder à cette XmlDocument comme:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc = HttpContext.Current.Application["xmlDoc"]; 

l'erreur que je reçois en construction est

Impossible de convertir implicitement le type 'objet' à 'System.Xml.XmlDocument'. Une conversion explicite existe

Alors Comment affecter la variable HttpContext.Current.Application ["xmlDoc"] en tant que System.Xml.XmlDocument?

Répondre

0

obtenu la réponse après un peu googler, simple mais peut être difficile pour un développeur PHP travaillant sur C# (comme il a été dans mon cas) bien que je juste devais jette explicitement ma variable d'état de l'application à XmlDocument qui est à la place de:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc = HttpContext.Current.Application["xmlDoc"]; 

J'utilisé:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc = (XmlDocument) HttpContext.Current.Application["xmlDoc"]; 

et il devient robuste :)

peut me dire ce que sera la durée de vie de cette variable ApplicationState?

+0

S'il vous plaît modifier votre question/ajouter une question séparée si vous avez une autre question. Ne l'avez pas dans le cadre d'une réponse. –

1

Votre problème est ici:

xmlDoc = HttpContext.Current.Application["xmlDoc"]; 

Essayez

xmlDoc = HttpContext.Current.Application["xmlDoc"] as System.Xml.XmlDocument; 
+0

ahan merci, que diriez-vous de la réponse que je viens de poster, pouvez-vous me guider quelle approche dois-je utiliser. Je veux dire, y at-il une différence entre les deux, à la fois explicitement jeté qu'ils ne le font pas? –

+0

La distribution explicite peut générer une exception si l'objet ne peut pas être casté. L'utilisation de 'as' définira l'objet sur null. La distribution directe peut donc être légèrement plus performante et aider à détecter les erreurs plus rapidement. Utiliser 'as' me semble plus lisible. –