1

我正在为 ScriptManager 使用 ASP.NET 3.5 SP1 中提供的新 CompositeScript 功能。

当我使用 ASP.NET 开发服务器对其进行测试时,它工作正常,但是当我将站点发布到我的 IIS 网络服务器时,无法下载组合文件,我总是收到以下错误:无效的 ViewState。

添加到 ScripResourceHandler 的查询字符串很长(原因??):

<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">

有谁知道这个问题的解决方案?

4

2 回答 2

2

我认为 ScriptResource.axd 的链接无效。

AFAIK,ScriptResource.axd 上的查询字符串由两个参数(d 和 t)组成。d 参数是一个加密字符串,包括程序集、版本号(如果适用)和嵌入在所述程序集中的资源(即 javascript 文件)的名称。加密基于机器密钥。t 参数是更新程序集的日期(以刻度为单位)。

如果您查看 Reflector 并查看 System.Web 程序集并查看 UI.Page,则有一个名为 DecryptString 的私有方法。我现在不在 Windows 上,但如果你往下看 DecryptString,你会看到最终你会得到一个异常“无效的视图状态”。

有几种不同的方法可以进行复合脚本和脚本组合。但我不认为任何 ScriptManager 控件(AjaxToolKit 也有一个)真正做到了这一点。在实践中,我发现你总是在外面留下一些脚本。

需要考虑的其他一些资源是: Omar Al Zabir 在 codeproject 的帖子:http: //www.codeproject.com/KB/aspnet/HttpCombine.aspxhttp://www.codeproject.com/KB/aspnet/fastload。 .aspx _ Omar 也有一本涵盖性能的好书。

同样在 codeproject 上,Moiz Dhanji 的方法略有不同:http: //www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx。

于 2009-01-09T19:15:21.223 回答
2

Martin 指出的 Omar 和 Moiz 方法的另一种变体是 Cristian 在他的N2 CMS 项目中采用的一种。

这个想法是,不是在配置文件中描述每组脚本,而是为每组创建一个虚拟子文件夹。然后,根据请求,一个特殊的 HTTP 处理程序所要做的就是遍历请求的目录并处理在那里找到的所有文件。

于 2009-03-16T07:06:06.537 回答