2010-07-22 7 views
2

Nous avons une ancienne application ASP qui instancie une classe visible COM .NET. Dans cette classe, nous effectuons une sérialisation pour stocker notre objet dans la session. Lorsque j'appelle la ligne de code suivante dans ma classe de test, cela fonctionne correctement.La création de XMLSerializer dans .NET déclenche une exception

var cereal = new XmlSerializer(couponApplicator.GetType()); 

Cependant, quand il est appelé dans le site et je suis le débogage, il jette l'erreur suivante:

{"Cannot execute a program. The command being executed was \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe\" /noconfig /fullpaths @\"C:\\WINDOWS\\TEMP\\rwot-yx9.cmdline\"."} System.SystemException {System.Runtime.InteropServices.ExternalException} 

Je pensais que peut-être été des autorisations liées donc j'ai essayé de donner « TOUT LE MONDE » contrôle total dans le dossier windows/microsoft.net ainsi que dans le dossier windows/temp. Pour référence, je cours cela sur une machine Windows XP. Des idées?

Répondre

2

Compris. L'outil IIS Lockdown avait défini des autorisations de refus sur tous les exécutables * .exe du répertoire windir. Je devais donc supprimer le refuser des privilèges d'accès sur ces deux fichiers dans les fenêtres/microsoft.net/framework/v2.0/dossier

Cvtres.exe

csc.exe

Puis, je lui ai donné les comptes IUSR et IWAM lisent et exécutent les autorisations sur ces deux fichiers ainsi que sur le répertoire temporaire de Windows.

Voici un message expliquant plus de détails: http://www.evilrob.org/journal/archives/2005/05/16/iusriwam-accoun.html

+0

Heureux que vous figured it out! –

0

J'ai constaté que j'ai des problèmes avec les assemblages de sérialisation car j'utilise pas mal la sérialisation XML pour conserver les paramètres d'application, etc. lorsque je travaille sur des applications Windows. Ce que j'ai trouvé, c'est que j'ai beaucoup mieux réussi à déployer dans un environnement LUA en créant les types Serializer à l'avance en utilisant sgen au lieu de les créer à la volée lors de l'exécution.

Si vous n'avez pas vraiment besoin de les créer dynamiquement au moment de l'exécution, cela peut valoir la peine d'être étudié. C'est plutôt simple à faire. Créez simplement un événement de génération de post dans votre projet .NET qui appelle sgen sur l'assembly contenant les types que vous voulez sérialiser (assurez-vous qu'ils sont marqués [Serializable()]), il suffit d'inclure l'assembly * .XmlSerializers qui est créé lorsque vous déployez et vous ne devrait pas avoir à vous soucier des autorisations spéciales lorsque vous utilisez le XmlSerializer.

Questions connexes