Vista自带IIS 7.0+Ajax.net的配置问题

来源:互联网 发布:航母知乎 编辑:程序博客网 时间:2024/06/08 10:54
Vista自带IIS 7.0+Ajax.net的配置问题

VS2005 sp1在Vista下运行还是不错的。不过很多新的东西在一起就容易产生不兼容的问题。项目使用Asp.Net,用.Net 2.0。部署在Windos Server 2003 + IIS 6.0。开发使用的是Vista,自带有IIS 7.0。项目还使用Ajax.net。

Vista下的开发很容易,只要安装好IIS,注意子选项要选得宁多不缺。很多问题都是因为IIS 7.0里面的功能没安装。.Net 2.0的问题在Vista下没有。无需regiis。注意次序很重要。IIS装好后就可以装VS2005。2003大概是不兼容的。装好后马上升级。Vista自动安装VS2005 SP1 for Vista。运行的时候老老实实run as administrator。这些功课都做完后基本可以用来开发了。但是Ajax.net现在已经必不可少,也要下载来安装。安装十分简单,但如果不是按照上面的次序安装就可能缺功能了。

到此安装结束。打开VS,新建Web Project的时候可以看到Ajax enabled web app选项。ok,就是它了。运行下新的项目,一般不会有错。但我遇到了很多情况。包括以前,现在的。现来总结一下。

首先要确认AjaxControlToolkit.dll 拷贝到Bin目录。项目向导有时候不会那么聪明的。

IIS中是否设置了DefaultAppPool,一般不要去设定为Classic .Net AppPool。

检查Web.Config文件。为了兼容以前版本,<system.web>中必须有:

    <httpHandlers>
      
<remove verb="*" path="*.asmx"/>
      
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<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>

为了能在IIS 7.0下工作,下面也是同样要的:

<system.webServer>
    
<validation validateIntegratedModeConfiguration="false"/>
    
<modules>
      
<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    
</modules>
    
<handlers>
      
<remove name="WebServiceHandlerFactory-Integrated" />
      
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
           type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
           type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    
</handlers>
</system.webServer>

其中<validation validateIntegratedModeConfiguration="false"/>能让两个同样的设置平安共处,在IIS 6.0和7.0下都能使用。

检查assembly有没有加上;<add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>可以方便在代码中直接插入<ajaxToolkit:ModalPopupExtender>之类标签。

测试项目阶段,如果IIS提示有Permission问题,解锁:(run as administrator)

C:/Windows/system32>%windir%/system32/inetsrv/appcmd.exe unlock config -section:
system.webServer/handlers

若出现JavaScript报错,什么Sys undefined,看看Web.Config。还有axd文件是否可以被IIS解析?

总之,IIS6的问题要少很多。在6上成功运行的话,毛病多数在Web.Config上。IIS的配置也不可放过。

原创粉丝点击