UrlRewrite是最近使用較為廣泛的技術,不少網站為了隱藏或體現更為人性化的地址,而紛紛對之拋以媚顏,同時,另一種開發模式Atlas也在AJax浪潮中小露拳腳。我想,不少人對這兩樣東西都是非常喜歡的。
在最近一次開發中,為了讓用戶使用簡便的URL點播媒體文件,采用了HttpPage重寫,該播放頁面上有對媒體文件評價的功能,采用的是Atlas調用部署在另一台服務器上的WebService服務。於是問題來了,重寫出來的播放頁面中Form的action被改寫了,但ScriptManager注冊過的Service Path卻仍然調用真實地址注冊的內容。結果一直報出Service未定義的錯誤。
在嘗試用JS改變Form的Action失敗後,相繼嘗試將Service注冊寫成HardCode(也就是寫成固定地址),也以錯誤告終。
重新審視整個調用的過程發現,Urlrewrite重寫後,除了頁面內的方法能正確執行外,其他一概不能正確執行,於是想到將WebService轉移到頁面,因為Atlas可以調用Page Method方法。隨後做了如下的事情將WebMethod原封不動copy至播放頁面的.cs文件中(帶上[WebMethod]屬性),在原來Atlas調用類似SerivceTypeName.MethodName()的地方改用PageMethods.MethodName(),重新打開頁面,一切OK了。
希望對於喜歡Atlas又遇到使用Urlrewrite的朋友在遇到相似問題時有所幫助吧。