我的计算机上安装了.NET 4.0和.NET 2.0。我尝试运行一个带有异步触发计时器刻度功能的AJAX.NET应用程序,我的页面正在重新加载,即(异步回发不起作用)。我尝试将我的应用程序池更改为Classic .NET 4.0
,但我收到错误
HTTP Error 404.2 - Not Found
The page you are requesting cannot be served because of the ISAPI and CGI Restriction list settings on the Web server.
当我将我的应用程序池更改为Classic .NET 2.0
时,会显示页面,但会按计时器间隔回发。
还有什么我应该添加到我的Web.Config文件中的吗
<configuration>
<system.web>
<pages enableEventValidation="false" enableViewState="false" enableViewStateMac="false">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<httpRuntime maxRequestLength="32768" executionTimeout="3600"/>
<httpHandlers>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
<compilation defaultLanguage="c#" debug="false">
<assemblies>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
</system.web>
</configuration>
我的AJAX.NET代码是
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:Timer ID="Timer1" runat="server" Interval="200" ontick="Timer1_Tick" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
您可以通过打开IIS管理器,选择服务器,然后双击isapi和cgi限制图标(假设win 7或win server 2008)来解决isapi和cgi限制问题。
在生成的屏幕中,右键单击ASP.NET v2.0.50727的每个条目(假设是64位操作系统;32位操作系统中只有一个),选择Edit...
并选中Allow extension path to execute
复选框。
这应该允许ASP.Net 2.0应用程序运行。
就页面发布而言,最好的建议是将其封装在一个单独的更新面板中:
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"
ID="upTimer">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick" />
</ContentTemplate>
</asp:UpdatePanel>
您可能还想考虑将计时器间隔从200毫秒增加到200毫秒,除非您经常需要它(我在上面将其修改为2秒)。
还有一个其他设置需要检查:如果您从.Net 1.1应用程序迁移了此应用程序,则web.config中可能会留下<xhtmlConformance mode="Legacy" />
标记。
如果是这样的话,这绝对会导致这个问题,正如微软名人Scott Guthrie所报道的那样。