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的配置也不可放过。