我正在发布从开发到生产的几个 asp.net 网站。一切似乎在开发中运行良好,但在发布到生产环境时,我们在访问该站点时遇到了一些 javascript 错误。这似乎是服务器上的东西,尽管相同的代码已部署到测试服务器并且可以在相同的客户端上正常工作。服务器是使用 IIS7 的 Windows 2008
抛出的错误:
一些语法错误 (scriptResource) - 其中 10 个
Error: syntax error
Source File: http://website.com/ScriptResource.axd?d=abc032_vah79hasdf87&t=123456789
Line: 3
Source Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
错误与上述相同,但使用 WebResource.axd 而不是 ScriptResource.axd - 其中 2 个
然后两个似乎是真正的原因?
Sys is not defined
和
WebForm_AutoFocus is not defined
----------------- 附录 --------------------------------
根据建议,我查看了 ScriptResource.axd 和 WebResource.axd
正在部署的 Web 应用程序具有表单身份验证,并且如果引用了登录页面以外的任何页面,则会重定向到登录页面。ScriptResource.axd 和 WebResource.axd 似乎正在发生这种情况(即登录页面尝试引用这些项目,发生重定向,因此他们无法取回 javascript,引发错误)
为此,我在 web.config 中添加了“位置”标签,以尝试允许所有用户访问这些项目,因此登录页面可以正常工作(请参阅下面的相关 web.config 部分)
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="home.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
...
</system.web>
<location path="ScriptResource.axd">
<system.web>
<authorization>
<allow users="*"/>
<!-- allow all users -->
</authorization>
</system.web>
</location>
<location path="WebResource.axd">
<system.web>
<authorization>
<allow users="*"/>
<!-- allow all users -->
</authorization>
</system.web>
</location>
不幸的是,这也没有解决问题。是否有一些设置/配置选项可以阻止位置标签工作?我们为应用程序中的页面添加了相同的标签(用于测试),它适用于开发人员的机器,但不适用于服务器。看起来如果我们可以让这些位置标签在服务器上工作一切都会工作,有什么建议吗?
在新的浏览器窗口中打开源文件 (...ScriptResource.axd...) 的完整 URL。您应该会看到一些 JavaScript 内容。如果没有,则 asp.net ajax 组件未正确安装。
表示没有Ajax客户端组件,找不到sys类。
如果您使用 .net 3.5,它是框架的一部分,问题应该在 web.config 中,使用 .net 2.0 时,您需要ASP.NET AJAX 1.0,如果您在服务器上安装此 msi,文件将进入GAC,.net 组件的中心位置。您可以在不安装 msi 的情况下将单个文件 System.Web.Extensions.dll 放入您的 bin 目录,但您仍然需要在 web.config 文件中进行正确设置。ajax.asp.net网站有很多关于这一切的信息。
听起来您可能缺少服务器上的组件,或者 Web 本身没有正确配置为使用 ASP.NET Ajax 组件。也许开发人员使用了另一个库,例如 Ajax.NET Toolkit,并且需要将它安装在服务器上?
好的,这个问题有两个部分和两个解决方案:
首先:由于 /ScriptResource.axd 和 /WebResource.axd 位于网站的一个部分中,然后重新定向到登录页面(表单身份验证),导致系统未定义,因此未获得所需的 javascript从那些文件中。
第二:一旦添加了标签以使这些项目能够被看到,就会发现匿名访问被禁用,并且似乎必须启用标签才能工作匿名访问。
要对此进行调试,我会尝试使用FiddlerTool并查看您的页面尝试加载的所有资源(ScriptResource.axd 和 WebResource.axd)的确切响应。GAC 中的程序集可能存在一些版本冲突。
这个问题还有其他一些帖子/讨论,也许有适合您的解决方案:
我有这个问题。WebResource.axd 找不到 WebForms.js(嵌入在 System.Web.dll 中)。
我修复了服务器上的 ASP.NET xx 框架安装,之后它就可以工作了。
我遇到了同样的问题,并将丢失的 WebForm_Autofocus 代码跟踪到 web.config 中的一个选项,. 当这个选项被删除/注释掉时,一切正常,并且为所有剩余的脚本函数生成了 js 脚本。
这似乎是一个可能需要 Microsoft 解决的 web.config 问题。我正在使用 VS 2010,版本 10.0.40210.1 SPIRel,代码面向 .Net 4.0。当此选项处于活动状态时,我还没有弄清楚杀死 JS 生成的底层过程。