接獲報案,某ASP.NET PageMethod程式部署至正式主機失效,以jQuery送出POST Request,未傳回JSON結果而是傳回完整網頁,如同未設[WebMethod]屬性一般。
經過對照測試,鎖定問題只有在ASP.NET網站跟SharePoint 2007並存於同一IIS站台時發生,只要脫離Sharepoint魔掌就一切如常。
爬文找到有人提及需確認web.config已加入ScriptModule,PageMethod才能正常運作:
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
但問題專案為.NET 4.0,預設已載入ScriptModule,不像3.5需額外加掛,何況同一web.config設定在沒遇到SPS時是正常的!推測SPS涉有重嫌,加上有前科,即刻發出拘票抓回審問!
打開SPS的web.config檔找到<httpModules>的一瞬間,我就明白了!
問題出在第一列的<clear />,SPS把預設的HttpModule清光光,再依序重新掛上所需模組。這樣子就算.NET 4預設已載入ScriptModule也被清掉,少了ScriptModule,造成PageMethod失效。
找出原因,要解決只是一塊蛋糕。在使用PageMethod ASP.NET web.config補上ScriptModule:
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
搞定收工!