2009-01-09 12 views
1

J'utilise la nouvelle fonctionnalité CompositeScript disponible dans ASP.NET 3.5 SP1 pour ScriptManager.CompositeScript - Erreur Viewstate non valide

Lorsque je le teste avec le serveur de développement ASP.NET, cela fonctionne très bien mais lorsque je publie le site sur mon serveur Web IIS, les fichiers combinés ne peuvent pas être téléchargés, j'obtiens toujours l'erreur suivante: ViewState non valide.

Le querystring qui est ajouté à la ScripResourceHandler est assez long (cause ??):

<script type="text/javascript" src="/ScriptResource.axd?d=8PM7kHuMMquT4Ta6cvC_2JLE_mKmYLeDWgV9z71Ryu5-7LRuy1v7MkEzM-M-NoE92QPDzXGBBSohhGbO17FKHqTZ9xMJx_5WaNrJTiwoFF28dlc6k02jRhN73u_Ohv7CKe-QPUdCOnzsBblNlopier7Ijd66Jp6Z0voAkZp36RzWYd64G9SOBCUs1HTu7oRQJTOlWyAd26O2r3S7Js7VX1YddtK-zO7DHa272a5-BitDkKTubnMPlwyYnW0Cn7TVK7NCjyF_o1E6wgPWY4THH56YNMtyRKeTrGFzMjTkiOmv18i2ePMHErlWYBXiL0If47bfPbNtfIeAMQAT8xX_DMBN6VR74GDlJSXQpFcGadNsKocZ4EOonDLykWf6Oq4ISr54_c-k_zzma5f6qFk1fXx8n8Vphe_QL67R-7aDlwBH9CrK-IBsuYDDeMSlTMWAZ6TRIhZSAyVANvh2VPZ8eBmGD0BpVA7D8e2vA1l6_kbC7w6CmGCEok-Cb1dqQPjgwB6Ho199M3IWrdwbUkN2leiDXn9bkZMGWA75IyjYiDisAz97JyA9AtDolhYGbxJ_AVrIpNpZFOQBZsXBkLfoo7iZmzHLwG7HNPhodtaekPAcxiKgi7Xf62DEnb20VRYMCFH8Qzfx5u4nlzZo4n7ZMkxDpWPlB65LCeCtvC6ZIl1kbq9FJ9dlf_DAkNU3-KKy__87Tzz9RWx6ucLXRGuljodLjiT8wrWRET_CpCspnHqpByBxEXiOi1_jW0e6_GjfZ9Fqk9GIXsSoTvnZmz_J68d28rSafQVKO1O06AjHCCBd7wh5mY-ISSLFaZ0pPszjdgVYxnC83ujaY9SWmRxUb_lPT4VdYG1Q02iyRO2l7BIDO-NiF77V_kklBhQRZ5ZiT3Vbf-JL6EZISThBJuh3WA2"> 

Est-ce que quelqu'un sait une solution à ce problème?

Répondre

2

Je pense que le lien vers ScriptResource.axd n'est pas valide. Autant que je le sache, la chaîne de requête présente sur ScriptResource.axd est composée de deux paramètres (d et t). Le paramètre d est une chaîne cryptée qui comprend l'assemblage, le numéro de version le cas échéant et le nom de la ressource (c'est-à-dire le fichier javascript) qui est incorporé dans ledit ensemble. Le cryptage est basé sur la clé machine. Le paramètre t est la date à laquelle l'assemblage a été mis à jour (en ticks).

Si vous jetez un oeil à Reflector et jetez un coup d'œil à l'assembly System.Web et regardez UI.Page il existe une méthode privée appelée DecryptString. Je ne suis pas sur Windows au mo, mais si vous regardez DecryptString, vous verrez que vous aurez une exception "Invalid viewstate".

Il existe différentes manières de créer des scripts composites et de combiner des scripts. Mais je ne pense pas que l'un des contrôles ScriptManager (AjaxToolKit en a un aussi) a vraiment eu un gros problème. En pratique, je trouve que vous avez toujours quelques scripts à l'extérieur.

Deux autres ressources à prendre en compte sont: les publications d'Omar Al Zabir à codeproject: http://www.codeproject.com/KB/aspnet/HttpCombine.aspx et http://www.codeproject.com/KB/aspnet/fastload.aspx. Omar a aussi un bon livre qui couvre la performance.

également sur CodeProject, Moiz Dhanji a une approche légèrement différente: http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx.

2

Une autre variante de Omar et les approches de Moiz, a souligné Martin, est un employé par Cristian dans son N2 CMS project. L'idée est que, au lieu de décrire chaque groupe de scripts dans un fichier de configuration, il suffit de créer un sous-dossier virtuel pour chaque groupe. Que, sur demande, un gestionnaire HTTP spécial aLL a à faire est de parcourir le répertoire demandé et de traiter les fichiers ALLL qui s'y trouvent.