我在IIS 7.5上运行经典ASP和ASP.net 4.0。
在我的经典ASP代码中是这段代码:
' Process @ alerts
Dim objHttp
set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
objHttp.open "POST", strSiteRoot & "handlers/forumalerts.ashx?", false
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHttp.Send "topicID=" & lngTopicID & "&threadID=" & lngLastPostID
set objHttp = nothing
这是向ASP.net ASHX处理程序发送请求。运行时,它会在最终发送错误消息之前挂起很长时间:
msxml3.dll错误'800c0008'
指定资源的下载失败。
/forum/new_post.asp,第1036行
我已经检查了它发布到的网址,它存在且正在运行。发送的数据也是正确的。
在我全新安装Windows 7之前,它运行正常。自从重新安装它以及再次设置IIS后,这段代码就失败了,这让我感到相信它是一个权限/身份错误。
谁能告诉我是什么原因导致的?我有3个应用程序池:
ASP.net v4.0 (Integrated) (ApplicationPoolIdentity)
ASP.net v4.0 Classic (Classic) (ApplicationPoolIdentity)
DefaultAppPool (Integrated) (NetworkService)
感谢您的帮助!
编辑:我在日志中发现了这个错误:
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 02/11/2011 14:55:42
Event time (UTC): 02/11/2011 14:55:42
Event ID: 4e550d910b934d2781707701f833e18e
Event sequence: 39
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/ROOT-2-129647191892089824
Trust level: Full
Application Virtual Path: /
Application Path: C:\inetpub\wwwroot\ScirraNew\
Machine name: TOM-PC
Process information:
Process ID: 7980
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information:
Exception type: ArgumentNullException
Exception message: Value cannot be null.
Parameter name: String
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s)
at forumalerts.ProcessRequest(HttpContext context) in c:\inetpub\wwwroot\ScirraNew\Handlers\forumalerts.ashx:line 13
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Request information:
Request URL: http://127.0.0.1/handlers/forumalerts.ashx
Request path: /handlers/forumalerts.ashx
User host address: 127.0.0.1
User:
Is authenticated: False
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information:
Thread ID: 39
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: True
Stack trace: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s)
at forumalerts.ProcessRequest(HttpContext context) in c:\inetpub\wwwroot\ScirraNew\Handlers\forumalerts.ashx:line 13
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Custom event details:
第13行是第一个request.form:
int TopicID = int.Parse(context.Request.Form["topicID"]);
答案 0 :(得分:4)
如果我理解正确,您正在向与呼叫服务器相同的服务器发出请求..
阅读http://support.microsoft.com/kb/316451
使用 ServerXMLHTTP 或 WinHTTP 对象制作递归超文本 传输协议(HTTP)请求到相同的Internet信息 建议不要使用服务器(IIS)服务器。更具体地说,是呼唤 Active Server Page(ASP)不应该向ASP发送请求 相同的虚拟目录或另一个虚拟目录 游泳池或过程。这可能导致由于线程导致的性能不佳 饥饿。
答案 1 :(得分:4)
第一步是停止使用Microsoft.XMLHTTP
,您不应该在服务基础场景中使用它。而是使用专为服务设计的MSXML2.ServerXMLHTTP.3.0
。
此外,如果正在发布的.ashx回调到原始ASP应用程序,那么Gaby
可能发生的线程饥饿问题可能正在发生。通常,您可以在使用率较低的网站上使用此功能。但是,如果您在应用程序上启用了ASP调试,那么回调到ASP应用程序肯定会挂起。请注意,这不适用于简单的ASP到ASHX场景。
如果您的问题仍然存在(可能会出现问题),那么: -
>netsh
>winhttp set proxy 127.0.0.1:8888
>winhttp reset proxy
现在检查fiddler中POST的请求/响应,这可能会揭示真正问题所在的一些线索。
答案 2 :(得分:0)
我是ASP经典新手。
但是请求的页面可能会向第一页发送响应并等待接收,第一页不会收到响应,因此会发生错误。
尝试在objHttp.Send
之后使用以下内容:
objHttp.ResponseText
噢,刚才发现这一行可能出现的错误:
objHttp.open "POST", strSiteRoot & "handlers/forumalerts.ashx?", false
尝试使用字符串" handlers/forumalerts.ashx?
"没有"?"最后。
答案 3 :(得分:0)
我已Server.CreateObject("MSXML2.XMLHTTP")
Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
然后错误再也没有出现过了。