我正在将客户端的经典 asp webapp 移至新的基于 IIS7 的服务器。该站点包含一些 .js 文件,这些文件包含 javascript,但在 <% %> 标签中也包含经典 asp,其中包含一堆条件语句,旨在根据会话状态变量输出 javascript 片段。以下是该文件可能是什么样子的简要示例......
var arrHOFFSET = -1;
var arrLeft ="<";
var arrRight = ">";
<% If ((Session("dashInv") = "True") And ((Session("systemLevelStaff") = "4") Or (Session("systemLevelCompany") = "4"))) Then %>
addMainItem("/MgmtTools/WelcomeInventory.asp?wherefrom=salesMan","",81,"center","","",0,0,"","","","","");
<% Else %>
<% If (Session("dashInv") = "False") And ((Session("systemLevelStaff") = "4") Or (Session("systemLevelCompany") = "4")) Then %>
<% Else %>
addMainItem("/calendar/welcome.asp","",81,"center","","",0,0,"","","","","");
<% End If %>
<% End If %>
defineSubmenuProperties(135,"center","center",-3,0,"","","","","","","");
目前,此文件(例如名为 custom.js)将开始抛出 js 错误,因为服务器似乎无法识别其中的 asp 代码,因此无法解析它。我知道我需要以某种方式指定 .js 文件也应被视为 .asp 文件并解析它。但是我不确定如何去做。
这是我到目前为止尝试过的...在 IIS 中的服务器节点下的 HANDLER MAPPINGS 下,我使用以下设置创建了一个新的脚本映射。
请求路径:*.js 可执行文件:C:\Windows\System32\inetsrv\asp.dll 名称:ASPClassicInJSFiles 映射:仅当请求映射到文件时才调用处理程序:文件 动词:所有动词 访问:脚本
我也在站点节点下创建了一个类似的处理程序。
在 MIME 类型下,.js 定义为 application/x-javascript
这些都不起作用。如果我简单地将文件重命名为 .asp 扩展名,那么一切就都正常了,但是这个应用程序的编码很差,并且有数百个文件,其中包含 .js 文件,它们位于不同的名称和位置,所以重命名、搜索和替换是我最后的选择。
答案1
我认为您的步骤是正确的。我刚刚在 IIS7 和 7.5 的站点级别上尝试了此操作,在两种情况下它都有效并且经典 ASP 代码可以正确执行。
不确定您的设置出了什么问题。通过查看有序列表仔细检查脚本映射是否不在 StaticFile 映射下方。
此外,如果您使用的是 64 位操作系统,请确保应用程序池是 64 位的,如果“启用 32 位应用程序”设置为 true,则需要使用 32 位版本的 asp.dll (C:\Windows\SysWOW64\inetsrv\asp.dll)
答案2
您采用的定义是正确的,但 iis 在您的 web.config 中写入了一个额外的 preCondition="bitness64" 手动编辑您的 web.config 并删除 preCondition 并且一切都将正常工作