在集成管道中运行的经典ASP

时间:2011-05-06 17:30:07

标签: asp-classic

我正在将经典的asp应用程序(我知道,幸运的是)迁移到混合的asp.net/asp站点,似乎我无法访问Request.Form集合。就像测试一样,我这样做了:

for each x in Request.Form 
    Response.Write("<br>" & x & " = " & Request.Form(x)) 
next 

我明白了:

请求对象错误'ASP 0101:80004005' 意外的错误 [我的剧本],第xx行 该函数返回|。

如果我将App Pool从Integrated Pipeline切换到Classic,则代码可以正常运行,但是在经典模式下运行不是.net应用程序的选项。我的未来有解决方法吗?

2 个答案:

答案 0 :(得分:3)

在经典asp中访问Request.Form时出现意外错误是因为托管代码模块或处理程序触及了请求主体,之后本机代码无法使用它。

请参阅http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154

  

托管HTTP模块读取实体主体的某些部分。例如,模块读取Request.Form或Request.Params。这会导致POST请求的实体主体被读入托管内存。因此,实体主体不再可用于在IIS 7或IIS 7.5集成模式下运行的任何本机代码模块。

如果您控制托管模块,而不是让管道继续使用经典的asp处理程序,请使用带有额外http标头的Server.TransferRequest,您可以在下次执行模块时检查该标头。请参阅此回答https://stackoverflow.com/a/18078054/2837402

答案 1 :(得分:2)

这里唯一可以做的就是为你的asp经典页面创建另一个应用程序池,并为他们创建一个关于新应用程序池的新应用程序(也就是新的虚拟目录)。

由于你不能在asp和asp.net之间共享任何应用程序或会话范围,这应该不是问题。