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