我正在将几个 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>
不幸的是,这也没有解决问题。是否有一些设置/配置选项可以阻止位置标签工作?我们在应用程序中为页面添加了相同的标签(以进行测试),它在开发人员的机器上可以工作,但在服务器上不行。看起来如果我们能让这些位置标签在服务器上工作,一切都会正常,有什么建议吗?
答案1
在新浏览器窗口中打开源文件 (...ScriptResource.axd...) 的完整 URL。您应该会看到一些 JavaScript 内容。如果没有,则表示 asp.net ajax 组件未正确安装。
Sys is not defined
表示Ajax客户端组件不存在,找不到sys类。
如果你使用的是.net 3.5,它是框架的一部分,问题应该出在web.config中,当使用.net 2.0时,你需要ASP.NET AJAX 1.0,如果您在服务器上安装此 msi,则文件将进入 GAC,即 .net 组件的中心位置。您可以将单个文件 System.Web.Extensions.dll 放入 bin 目录中而不安装 msi,但您仍然需要在 web.config 文件中进行正确的设置。该站点网页版有很多关于这方面的信息。
答案2
听起来你可能在服务器上缺少某个组件,或者 Web 本身未正确配置以使用 ASP.NET Ajax 组件。也许开发人员使用了其他库(如 Ajax.NET Toolkit),而需要在服务器上安装它?
答案3
好的,这个问题有两个部分和两个解决方案:
首先:由于 /ScriptResource.axd 和 /WebResource.axd 位于网站的一部分,并且随后重定向到登录页面(表单身份验证),而登录页面无法从这些文件中获取所需的 javascript,因此发生了 Sys 未定义的情况。
第二:一旦添加标签以使这些项目可见,就会发现匿名访问已被禁用,并且看来要使标签起作用,必须启用匿名访问。
答案4
我遇到了这个问题。WebResource.axd 找不到 WebForms.js(嵌入在 System.Web.dll 中)。
我修复了服务器上的 ASP.NET xx 框架安装,之后它就正常工作了。