2011-02-09 3 views
1

J'ai un problème intéressant que j'essaie de résoudre. J'ai le code suivant ci-dessous qui est fondamentalement une fonction pour fusionner des valeurs avec un fichier html et me donner le jeu de résultats. J'utilise une hashtable à ces fins.C# Hashtable "référence d'objet non définie"

La fonction est la suivante (S'il vous plaît garder à l'esprit que j'ai hérité cette fonctionnalité et ne peut être changé à l'heure actuelle)

public static string ParseTemplate(string _FileName, int _NumberofSomething) 
{ 
    Hashtable templateVars = new Hashtable(); 
    templateVars.Add("NameOfFile", _FileName); 
    templateVars.Add("NumberOfSomething", _NumberofSomething); 
    TemplateParser.Parser parser = 
     new TemplateParser.Parser(
      System.Web.HttpContext 
      .Current.Server.MapPath("~/docs/Templatenr.htm"), templateVars); 
    return parser.Parse(); 
} 

Sur notre dev et serveurs live, il fonctionne parfaitement. Cependant, j'essaie de déployer l'application sur un autre serveur de production et d'obtenir une "référence d'objet non définie sur une instance d'objet". Il se brise exactement sur le "Hashtable templateVars = new Hashtable();" ligne. Donc, je suis un peu perplexe. Si c'était un problème de codage, cela ne devrait pas fonctionner partout sûrement?

Les seules différences entre les différents serveurs de production sont le système d'exploitation et les services Internet (IIS) en cours d'exécution. c'est à dire. Server 2005 et IIS7 vs Server2003 et IIS6 (qui est l'environnement qu'il casse). Les deux ont .net framework jusqu'à 3.5 installé. L'ancien système d'exploitation et l'ISS pourraient-ils être le problème? Est-ce une permission/mémoire? bien que cela semble un peu invraisemblable puisque toutes les autres fonctionnalités .net que j'utilise sur le nouveau serveur de production fonctionnent parfaitement.

Tous les problèmes concernant la hashtable que j'ai trouvé, se rapportent à ce qu'il ne soit pas instancié. Cependant, mon erreur se produit sur la ligne qui essaie d'instancier une Hashtable.

Quelqu'un a-t-il déjà eu une erreur comme celle-ci et si oui, comment l'avez-vous résolu? J'apprécierais même des suggestions sur ce qu'il faut chercher et je vais essayer. Je posterai également le résultat, si quelqu'un d'autre rencontre cette erreur à l'avenir.

+1

Est-ce que 'System.Web.HttpContext.Current.Server.MapPath (" ~/docs/Templatenr.htm ")' ce fichier existe sur le nouveau serveur? Le compte d'utilisateur qui exécute l'application a-t-il également accès à ce fichier? – Jimmy

+1

Personnellement, je suggérerais d'utiliser un outil tel que Reflector Pro pour déboguer dans le code Framework pour le constructeur HashTable, afin de voir d'où l'exception est réellement levée. –

+0

@Jimmy, Oui et Oui. Cependant la fonction ne va même pas aussi loin, elle s'arrête à la première ligne. – Sonja

Répondre

0

Je n'ai jamais vraiment compris le fond de cette erreur. Les suggestions d'utilisation du débogage à distance avec Reflector Pro ne fonctionnaient pas non plus, indiquant certains problèmes avec le serveur virtuel sur lequel le site Web s'exécutait. La vérification des fichiers journaux a montré d'autres erreurs que le framework .net a rejetées.

Le site Web a été déplacé vers un nouveau serveur virtuel utilisant IIS7 et Windows Server 2008. Il a fonctionné tel quel dans le nouvel environnement. Ceci n'est peut-être pas la solution idéale pour tout le monde et peut-être qu'une réinstallation du framework aurait pu résoudre notre problème, mais puisque nous étions en train de passer à un nouvel environnement (pour d'autres raisons) cette solution nous convenait.