我在PHP(5.2.9-1)应用程序中有一个表单导致IIS(Microsoft-IIS/6.0)在POST时抛出以下错误:
无法显示您要查找的页面,因为使用了无效的方法(HTTP谓词)来尝试访问.
这是一个HTTP 405状态代码.应用程序中的所有其他表单都有效,因此我认为PHP页面的IIS'动词'设置是正确的.
这是客户的服务器,我无权访问以验证设置或测试代码.我所能做的就是发送客户替换文件.IIS服务器上的其他客户没有此类问题.
表格非常简单:
<form method="post" action="index.php">
... fields ...
</form>
Run Code Online (Sandbox Code Playgroud)
什么可以导致IIS仅在一个表单上抛出该错误,但在其他表单上工作正常?
我有Windows Server 2003(IIS 6.0)和Windows Server 2008(IIS 7.0)服务器,我使用MSBuild来部署Web应用程序.
我需要进行安全部署,并执行此操作:
停止IIS 6中的网站(或IIS 7中的应用程序),而不是停止AppPool.
检查网站是否停止; 没跑
如果网站已停止,请执行另一项部署任务.
启动IIS 6(或IIS 7中的应用程序)网站,
我怎样才能做到这一点?
更新:对我来说:IIS6WebSite和IIS6AppPool(以及IIS7),在尝试停止网站或AppPool时是否等待停止状态?
当我执行网站停止操作(或AppPool的停止操作)时,我需要确保100%网站已停止,然后,只有网站停止时,我才能执行其他目标.
我的.NET 3.5应用程序偶尔抛出以下异常System.Web异常:
客户端已断开连接
为什么会发生这种异常?我的应用程序在负载均衡的Windows Server 2003 IIS 6.0服务器上运行.
Thomas Marquardt撰写的以下文章描述了IIS如何处理ASP.Net请求,可配置为运行的最大/最小CLR工作线程/托管IO线程,涉及的各种请求队列及其默认大小.
现在根据文章,IIS 6.0中发生以下情况:
我想知道什么是"阈值",此时ASP.NET认为当前执行它的请求数太高,然后开始将请求排队到全局ASP.NET请求队列?
我认为这个阈值将取决于最大工作线程数的配置,但可能有一些公式基于哪个ASP.NET将确定并发执行请求的数量太高并开始将请求排队到ASP.NET全局请求队列.这个公式可能是什么?或者此设置是否可配置?
1)在IIS 6和IIS 7经典模式下,每个应用程序(AppDomain)都有一个队列,用于维护工作线程的可用性.如果可用工作线程数低于httpRuntime minFreeThreads指定的限制,则此队列中的请求数会增加.当超过httpRuntime appRequestQueueLimit指定的限制时,请求将被拒绝,并显示503状态代码,并且客户端收到带有"服务器太忙"消息的HttpException.还有一个ASP.NET性能计数器"应用程序队列中的请求",指示队列中有多少请求.是的,CLR线程池是.NET ThreadPool类公开的线程池.
2)requestQueueLimit命名不佳.它实际上限制了ASP.NET可以同时处理的最大请求数.这包括排队的请求和正在执行的请求.如果"请求当前"性能计数器超过requestQueueLimit,则将使用503状态代码拒绝新的传入请求.
因此,基本上requestQueueLimit限制了排队的请求数(我假设它将在应用程序队列中排队的请求数加上全局ASP.Net请求队列加上当前正在执行的请求数)并正在执行.虽然这不能回答原始问题,但它确实提供了有关何时因为大量并发请求/高延迟请求而可能收到503服务器忙碌错误的信息.
(检查更新2)
更新2
我的理解中存在错误.我混淆了IIS 6和IIS 7的描述.
实际上,当ASP.NET以集成模式托管在IIS 7.5和7.0上时,应用程序级队列不再存在,ASP.NET维护一个全局请求队列.
因此,如果认为执行请求的数量很高,IIS 7/7.5将开始将请求排队到全局请求队列.这个问题更适用于IIS 7/7.5而不是6.
就IIS 6.0而言,没有全局ASP.NET请求队列,但以下情况属实:
1.ASP.NET从IIS IO线程中获取请求并将"HSE_STATUS_PENDING"发布到IIS IO线程
2.请求被移交给CLR工作线程
3.如果请求具有高延迟并且所有线程都被占用(线程计数接近httpRuntime.minFreeThreads),那么请求是发布到应用程序级别请求队列(此队列是每个AppDomain)
4.此外,ASP.NET还会在接受新请求之前检查排队和当前正在执行的请求数.如果此数字大于processModel.requestQueueLimit指定的值,则将拒绝传入的请求,并显示503服务器繁忙错误.
使用以下步骤:
(我已经检查过这个类似的帖子,这不能解决我的问题.)
我添加了一个名为"Info"的视图,其中包含以下代码:
<h2>System</h2>
<h3>Request</h3>
<%
foreach (string key in Request.Headers)
{
Response.Write(string.Format("<p>{0}={1}</p>"
, key
, Request.Headers[key])
);
}
%>
Run Code Online (Sandbox Code Playgroud)
除了标准头文件,我还看到了这个:
X-REWRITE-URL=/home/info/eurl.axd/e3299f29f8043d4f8a27e0f1d0c40971
Run Code Online (Sandbox Code Playgroud)
我正在使用Helicon ISAPI Rewrite 3,它正在生成"X-REWRITE-URL"标题.
我的问题是:/eurl.axd?....来自哪里?我已经看过这篇文章,但由于这是一个带有新应用程序池的新文件夹中的空白应用程序,因此在此Web文件夹中没有运行2.0.*应用程序.没有虚拟文件夹指向另一个目录等.该站点配置为ASP.NET 4.0,已正确注册.
问题是eurl.axd正在调整我的MVC路由中的参数.
"ASP.NET 4.0重大更改"一文中的选项并不适用于我,因为此应用程序中没有任何2.0组件,我需要使用无扩展名的URL.
更新我刚刚注意到GAC中的System.Web.MVC是版本2.0.0.0.是否应该通过安装VS2010和4.0框架将其更新到4.0?
我不明白为什么我在默认的ASP.NET MVC 2应用程序中看到此错误.救命!!
2011年2月更新 - 已解决
终于尝试通过注册表黑客禁用无扩展名URL,问题就消失了.我发现禁止无扩展的URL使得无扩展的URL工作(使用IIS6中的通配符映射)是违反直觉的,但我会采取我能得到的.
2014年12月更新
(风流|快乐|和平)(圣诞节|光明节|宽扎节|十二月).
我忘了提到每个其他Windows更新都会破坏注册表更改.这似乎是一个奇怪的问题,一个请求http://site.dom/bob会失败,而http://site.dom/bob/成功.玩得开心!(注意尾随斜杠.)
我们这里有一个使用基于NTLM的Windows身份验证的asp.net 3.5应用程序.该系统在专用网络上运行,该网络实际上分布在不同的地理位置(通过VPN连接).
我们现在正在尝试优化网站的性能.由于NTLM的工作方式,每个对IIS的新请求都由3个不同的请求组成,而前2个是401个响应.我们正在尝试将这些请求的数量最小化,仅在会话开始时.我们找到了解决方案.不幸的是它并没有改变任何东西,我们继续得到这个401响应(消耗时间).
为了看到我第一次使用Fiddler应用程序的流量.不知何故,当我使用Fiddler时,在会话开始时只有一个身份验证过程(完全按照我的意愿),但当我关闭Fiddler并通过WireShark检查流量时,我可以看到每个请求仍然有401响应.
使用的客户端是IE6,IIS版本6.
有人可以提供建议吗?
任何人都可以帮我在IIS 6上运行Flask应用程序吗?我曾尝试使用isapi-wsgi,但是当我访问虚拟目录地址时,我得到一个页面,上面写着"找不到指定的模块".还有其他选择吗?
下面是我为isapi-wsgi编写的Python脚本.在IIS管理器中创建了虚拟目录并且一切正常,但该站点无法正常工作.
from wof import app
import os
app.secret_key=os.urandom(24)
import isapi_wsgi
def __ExtensionFactory__():
return isapi_wsgi.ISAPISimpleHandler(app)
if __name__ == '__main__':
from isapi.install import *
params = ISAPIParameters()
sm = [ScriptMapParams(Extension="*", Flags=0)]
vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
params.VirtualDirs = [vd]
HandleCommandLine(params)
Run Code Online (Sandbox Code Playgroud) 在哪里可以找到关于在IIS6上运行ASP.NET MVC的最佳实践的一些好的指针?
我还没有看到任何提供IIS7托管的网络主机的现实选项.主要是因为我不住在美国
所以我想知道如何在ASP.NET MVC中最好地构建应用程序,并使其可以轻松地在IIS6和IIS7上进行部署.请记住,这适用于标准Web主机,因此IIS6中无法访问ISAPI筛选器或特殊设置.
在开发ASP.NET MVC应用程序以定位IIS6时,还有什么需要考虑的吗?任何不起作用的功能?
更新:一个更大的问题是路线的问题.模式{controller}/{action}将适用于IIS7,但不适用于需要{controller} .mvc/{action}的IIS6.那么我该如何透明呢?请再说一遍,没有ISAPI,也没有IIS设置.
我有一个IIS6 Web服务器,托管两个应用程序池.有时候,其中一个w3wp进程会使CPU飙升一段时间,而且两个应用程序池似乎都会受到影响.我不确定哪一个是哪个,如果没有这些信息,我不知道应该责怪哪个应用程序.
如何判断哪个w3wp属于哪个App Pool?
我无法在IIS 6上运行ASP.Net MVC 4.
首先,我根据Phil Haack的博客文章:IIS 6演练中的ASP.NET MVC,在设置无扩展URL之后得到了"目录列表被拒绝"并且已经解决了.
现在,我收到"页面无法找到"404页面.
这是MVC 4 beta中一个简单的ASP.Net Web Api项目.