WebResource.axd引起的问题以及asp.net程序集与服务器时间的问题
WebResource.axd 如若遇到以下情况:
1)、所有涉及WebResource.axd引用的脚本不可使用;
2)、TreeView控件中图片不能显示,出现“X”号,当然这个也属于与WebResource.axd文件相关联;
3)、类似使用HyperLink、DropDownList等控件触发的“WebForm_PostBackOptions”未定义及下图中的WebForm_AutoFocus('xx')未找到对象等事件报错。
![](http://www.nnllok.cn/uploadfile/2010/11/02/20101102092637356.png)
以上均是由WebResource.axd提供,此文件并非真实存在,它是ASP.NET2.0提供的Web Resources管理模型,用于管理images、CSS、js等外部资源,它属于IIS中的一个ISAPI映射。
关于如何管理Web Resource资源请参考http://birdshome.cnblogs.com/archive/2004/12/19/79309.html 及http://blog.miniasp.com/?tag=/webresource.axd 这两篇文章。
.axd文件映射设置位于IIS主目录>应用程序设置>配置>应用程序扩展。
![](http://www.nnllok.cn/uploadfile/2010/11/02/2010110209274290.png)
WebResource.axd后跟有参数,形如
<script src="/WebResource.axd?d=TVfbQ3jRv_bGyGJiNtAlIQ2&t=634030634711406250" type="text/javascript"></script>
<img src="/WebResource.axd?d=NPU1tNcW9bhj2HGf2OPUXyRv__ALwmYPAmAw1DkERv01&t=634030634711406250" alt="" />
这里d显示为directory,对应资源的路径;t为timestamp,这个参数是为了保证资源不被缓存(还记得验证码后的Math.random()吗?)。
因此出现此类与WebResource.axd相关的问题,原因一般就是IIS中未对此axd文件进行处理,导致相应的图片、js等资源文件无法输出,引发此类问题。解决方法是,首先就应当检查IIS中是否已经添加了axd的映射;可以手工添加,不过还是推荐先运行aspnet_regiis.exe -i进行安装,然后查看是否已添加,若没有再进行手工添加。注意这里一定要将“确认文件是否存在”的小勾勾取消选择,见上图。
Assembly与服务器时间的问题
是不是有时候按上面讲的做还是解决不了问题?那这里就很大可能是下面的这个原因了:你的服务器时间不对——肯定是比正常时间要早。
这种错误可以打开IE8的开发人员工具,打开脚本面板,选择其中的一个WebResource.axd文件,其中源文件会报如下错误:
[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。 参数名: utcDate] System.Web.HttpCachePolicy.UtcSetLastModified(DateTime utcDate)
![](http://www.nnllok.cn/uploadfile/2010/11/02/20101102092932325.png)
这里大概是看出是哪个地方出现的原因了:是因为当前asp.net生成的dll程序集的最后修改时间+2316706小于当前时间,也就是说服务器时间比程序集生成时间早,导致无法使用程序集。
这是我的bin目录,生成时间是2010-3-14
![](http://www.nnllok.cn/uploadfile/2010/11/02/20101102093005122.png)
而我的当前系统时间为2009年3月14日,整整早了一年啊。
![](http://www.nnllok.cn/uploadfile/2010/11/02/20101102093033575.png)
关于这个程序集与服务器时间问题的更详细内容,可参考此文http://blog.brianhartsock.com/2009/02/21/systemargumentoutofrangeexception-at-systemwebhttpcachepolicyutcsetlastmodifieddatetime-utcdate/