IIS7.5 上的静态文件处理程序不提供脚本

Posted

技术标签:

【中文标题】IIS7.5 上的静态文件处理程序不提供脚本【英文标题】:Script not served by static file handler on IIS7.5 【发布时间】:2010-09-21 16:15:31 【问题描述】:

我刚刚尝试在我的 Windows 7 Home Premium 笔记本上将我的第一个 Web 应用程序部署到 IIS。创建应用程序后,我必须更改为经典应用程序池,然后将该池设置为框架 4.0。现在我收到以下错误:

HTTP 错误 404.17 - 未找到 请求的内容似乎是 脚本,并且不会由静态文件处理程序提供服务。

请求的 URL 是 http://localhost:80/pvmms/default.aspx

恐怕广泛的谷歌搜索并没有为我提供足够清晰或明确的信息,因此我像往常一样求助于专家。

编辑: 我怀疑这是因为 .aspx 文件没有框架 4.0 处理程序映射。然而,aspnet_regiis 甚至给了我的管理员用户一个手指,并说我需要管理员权限才能运行它。

编辑#2: 我注册了所有框架(2 和 4、32 和 64),现在一切正常。我通过手动将 .aspx 的脚本映射添加到 aspnet_isapi 和瞧。我不明白为什么框架的安装不这样做,除非我的记忆失败并且我在安装 VS 后才启用了 IIS。

【问题讨论】:

也可以在 web.config 中执行此操作,如下所述***.com/questions/2061678/… 【参考方案1】:

现在可能为时已晚,但通常你需要运行

aspnet_regiis.exe -i  

安装 asp.net 后。也许我现在还是会这样做。

【讨论】:

.NET Framework 附带了两个 IIS 注册工具;一种用于标准系统,一种用于 64 位系统。 64位系统的工具位于Windows文件夹内Microsoft.NET目录的Framework64目录中;例如 C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727 将包含 IIS 注册工具。 如果您收到错误 the command is not recognized as an internal or external command。在开发者命令提示符中运行它。 我必须为 Framework64 文件夹中的 2.0 框架执行此操作。就像@matthew Lock 所说的那样 另外需要注意的是,如果必须运行2.0和4.0,请先运行2.0。 C:\Windows\Microsoft.NET\Framework64\v2.0.50727(适用于 x64 上的 v2.0) - 将 Framework64 更改为适用于 x86 的框架,将 v2.* 更改为 v4.* 以用于 v4(浏览到父文件夹以获取确切名称)【参考方案2】:

除了上述之外,如果你需要 WCF 支持,你可能需要运行这个:

c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe -i

将 v3.0 替换为您当前的框架版本。

【讨论】:

请注意,我认为在使用 4.0 应用程序池的 webapps 上,您需要再次运行 aspnet_regiis 对于.Net 4,它在父目录中。例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319\ServiceModelReg.exe -i【参考方案3】:

我在尝试访问我编写的 WCF 服务时遇到了来自 IIS 8.5 的此错误。原来服务器没有打开 WCF HTTP 激活功能。选中复选框并单击向导,iisreset,开始工作。

【讨论】:

这对我来说适用于 IIS 8.5 和 Windows 8.1。我需要启用 ASHX 来获取问题中描述的错误 (HTTP 404.17) 谢谢!这对我有用。但是,在我的情况下,我必须为 .NET 2.0 打开它,因为我使用的是旧的 Web 服务 这是一篇旧帖子,但您的解决方案救了我的培根。我不会在一百万年后发现它……在其他任何地方。谢谢。【参考方案4】:

如果您使用的是 iis 7.5。

只需转到 IIS 管理器,打开您的网站属性。

您将在那里看到“处理程序映射”部分,只需转到该部分并搜索“静态文件”。

很可能是列表中的最后一个文件。

然后右键单击它并选择“Revert To Parent”。

我第一次遇到这个问题时已经浪费了这么多时间,无论如何这会解决你的问题。

【讨论】:

正如 Adi 所回答的:这个突击队就是这样做的:c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe -i 感谢@Kumar 的提示! IIS > 站点 > acme.com > 处理程序映射 > 恢复到父级。就我而言,我是为整个域做的,而不仅仅是“staticFile”。这对我有用,并且比运行可执行文件(aspnet_regiis.exe)更简单/更可取。为什么这个建议没有进一步冒泡? =) 绝妙的小贴士...但是,这到底是从哪里来的呢?我不记得在以前版本的 IIS 中遇到过这种情况......!【参考方案5】:

我在带有 ASP .NET 4.5 的 Windows Server 2012 中遇到了这个问题,您不能使用 aspnet_regiis.exe,只需要通过添加角色和功能向导安装 ASP .NET 4.5:

您可以在服务器管理器右上角的“管理”菜单中找到“添加角色和功能”菜单项

【讨论】:

服务器管理器右上角“管理”菜单中的“添加角色和功能”菜单项【参考方案6】:

我想应该检查一下这个选项

【讨论】:

这只是设置是否可以提供静态内容。我的问题是脚本请求被映射到静态内容。如果我关闭它,IIS 甚至不会尝试为页面提供服务,只是给我一个空白。【参考方案7】:

我通过启用WCF Services解决了这个问题

Programs and Features > NET Framework 4.5 Services > WCF Services> HTTP Activation node

但您必须承认,整个 IIS 设置配置/猜测/试用并查看/尝试此/尝试花费了我们 4 或 5 天的时间试图找到解决方法的方法是完全和彻头彻尾的笑话。

毫无疑问,“IIS”是迄今为止对人类玩过的最大的信心把戏

【讨论】:

您所要做的就是为 IIS 启用静态内容功能。这与 WCF 无关。 @ProfK 取决于您收到该错误的原因,不同的原因会导致相同的错误 - 如果您收到配置为使用 WCF 的 SVC 文件的错误,则上述修复它。 LOL 完全同意,移植了几个站点,只看到了 5 种不同类型的错误,都没有实际的错误消息或非常神秘的错误消息。示例“无法显示该页面,因为发生了内部服务器错误”表示您添加了一个已经存在的静态内容 mime 类型。【参考方案8】:

我知道这是一个老问题,但我刚刚在我重建的 Windows 8 机器上使用了 3.5 应用程序,在aspnet_regiis -iru 之后我仍然得到这个,结果证明是 ASP.NET 3.5 不是t 在应用程序开发功能中打勾(没有足够的声誉来发布图片)。

【讨论】:

@bicbmx 对于图片,您可以在将其上传到某处后分享链接,例如在imgur.com【参考方案9】:

默认情况下为您的应用程序创建的应用程序池有可能是版本 2。因此,尽管您在列表中看到 .svc 扩展名的处理程序,但它不起作用并将其视为静态文件。您只需打开应用程序池属性并将其切换到版本 4。

【讨论】:

【参考方案10】:

重新注册asp.net....将解决问题。

转到 Visual Studio 命令提示符,并将 asp.net 注册为 windows\microsoft.net\Framework[.Net version num]\aspnet_regiis.exe -i

【讨论】:

aspnet_regiis.exe -i 响应“此版本的操作系统不支持此选项。”为什么 IIS 如此令人头疼?【参考方案11】:

我在设置的 Windows 8 机器上遇到了同样的问题。我在安装 .NET framework 4.5 的 vs2010 之前安装了 vs2012。我的应用程序池在 4.0 中运行。我确保我使用 aspnet_regiis -i 为 4.0 注册了 aspnet。那仍然没有成功。然后我打开 Windows Features 并注意到 4.5 添加了一个名为“.NET Framework 4.5 Advanced Services”的集合。我启用了 WCF 服务节点及其子节点,然后我的 svc 端点正常运行。希望这对正在迁移到 Windows 8 的人们有所帮助。

【讨论】:

Server 2012, IIS8 也在这里,感谢您让我朝着正确的方向前进。对于那些感兴趣的人,我需要打开应用服务器角色以及 Web 服务器角色。我在这里找到了我需要的信息:msdn.microsoft.com/en-us/library/hh167503(v=nav.70).aspx【参考方案12】:

对于 Windows 10/Framework 4.7,我必须通过以下方法打开 HTTP Activation:

    控制面板 > 程序和功能 > 打开或关闭 Windows 功能 在 .NET Framework 4.7 高级服务下,展开 WCF 服务,选择检查 HTTP 激活以及使用 WCF 时需要的任何其他内容 单击“确定”并让安装完成,然后打开管理命令提示符并发出 IISRESET 命令

【讨论】:

【参考方案13】:

当我遇到同样的问题时,我偶然发现了这个问题。我的问题的根本原因是应用程序池配置不正确。当它需要设置为 4.0 时,它无意中设置为 2.0。以下链接的答案帮助我发现了这个问题:http://forums.iis.net/t/1160143.aspx

【讨论】:

【参考方案14】:

cmd -> 右键 -> 以管理员身份运行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

【讨论】:

【参考方案15】:

对于阅读本文的其他人:

如果您注册的 .Net 版本不是在附加到您网站的应用程序池的“基本设置”下选择的版本,就会发生这种情况。例如,您的站点应用程序池选择了 .Net v2.0,但您注册了 v4.0

【讨论】:

【参考方案16】:

我发现另一个可能的解决方案有相同的错误消息。

当尝试将 .NET 4.0 Web 应用程序设置到新的应用程序池时,我收到了这个奇怪的错误,告诉我它正在尝试使用静态文件处理程序处理我的 aspx 文件,这没有任何意义。

由于某种原因,.NET 4.0 的 ISAPI 在 IIS 管理器的服务器级别的 ISAPI 和 CGI​​ 限制 区域中设置为禁用。 只需将其设置为启用,但是 IIS 7.5 管理器非常复杂且难以理解,我花了很长时间才弄清楚这一点。

我猜是因为它是一个 4.0 引擎无法处理的 4.0 应用程序,所以默认使用静态文件处理程序。

【讨论】:

【参考方案17】:

我遇到了同样的问题。当我为 IIS 添加静态内容功能时,它工作正常。

【讨论】:

【参考方案18】:

这可能是多种原因,在我的情况下,应用程序池->高级设置->启用 32 位应用程序(应该是 true)。之前设置为 false。

【讨论】:

你是一个美丽的人。这实际上是问题所在。我们在安装时忽略了一些问题。【参考方案19】:

使用 IIS 管理器,我发现 .aspx 文件已映射(在“处理程序映射”下)到 ISAPI 2.0 - 即使之前安装了 ASP.NET 4.5。编辑它们以指向(也)指向 ISAPI 4.0 64 位的可执行文件修复了该问题。

可执行文件位于 %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll

【讨论】:

【参考方案20】:

我在 iis 7.5 上收到此消息,该应用程序具有分配给 .net 2.0 的经典应用程序池。我需要去 Handler Mappings 并添加两个脚本映射,除了名称之外,两者都相同。一个名称是 svc-ISAPI-2.0-64,另一个名称是 svc-ISAPI-2.0。请求路径是 .svc。可执行文件是 %SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll。我重新启动了 iis,一切都很开心

【讨论】:

【参考方案21】:

我刚刚解决的最坏情况之一是 - Web.config 中的条目冲突。

在我的本地计算机上,我没有在 IIS 中注册 .woff 扩展名,因此我使用 Web.config 添加了它。但是在生产服务器上 .woff 注册了 mime 类型。这导致了应用程序级别的冲突。

有趣的是,没有为此记录错误。只是猜测(当然是第一次)。

所以对我来说,解决方案就是从 web.config 中删除和/或元素。

【讨论】:

【参考方案22】:

我有同样的问题,我只是将网站上的目标框架版本更改为开发它的版本,在IIS中相同。这解决了我的问题。希望这会有所帮助...

谢谢

【讨论】:

以上是关于IIS7.5 上的静态文件处理程序不提供脚本的主要内容,如果未能解决你的问题,请参考以下文章

ISS发布程序,出现:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案

HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。

HTTP错误 404.17 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理

WCF HTTP 错误 404.17 - 未找到 请求的内容似乎是脚本,不会由静态文件处理程序提供

IIS 7及IIS 7.5下面.htaccess转为web.config的方法

IIS7.5使用web.config设置伪静态的方法