標籤:style blog http color 使用 os io 檔案
從一篇blog得知使用指令碼可以非同步呼叫Web服務,覺得很新鮮,因為自己很少用到Web服務,所以決定寫一寫看看什麼效果。
首先在UI項目(我使用的是MVC4.0)裡建立一個Web服務。
添加Web服務後,預設有一個HelloWorld方法。調用該方法有兩種形式,一是服務端通過執行個體化對象調用,二是前端指令碼非同步
調用。代碼分別是:
1.服務端調用
public ActionResult Index() { WebService1 ws = new WebService1(); var str = ws.HelloWorld(); return View(); }
2.指令碼調用
function CallBack() { $.ajax({ type: "POST", //注意這個地方web服務不支援GET請求 contentType: "application/json;utf-8", url: "http://localhost:7306/WebService1.asmx/HelloWorld", data: null, dataType: "json", success: function (result) { alert("success"); }, error: function() { alert("error"); } }); } CallBack();
結果指令碼調用發生錯誤。右擊WebService1.asmx——》從瀏覽器查看——》點擊調用HelloWorld,返回404錯誤。
我想這可能是MVC路由造成的。web服務無法根據路由規則找到HelloWorld方法,於是建立了一個MVC3.0(MVC3.0
預設是沒有路由檔案的)程式和一個WebForm程式。經測試在這兩者中不存在這樣的問題,我又把項目裡的路由注釋掉。
結果web服務可以正常訪問了。
經過一番測試,從而證實了自己的想法。看來,在存在路由的項目裡,非同步呼叫web服務還要進行簡單的封裝,即需要
把服務的方法放在控制器的某一方法裡。這樣,既不影響路由又能滿足非同步呼叫。
上面說了mvc路由引起非同步呼叫web服務的問題。還有一個問題是與路由無關。當你右擊在瀏覽器查看調用HelloWorld
方法時,重新整理頁面HelloWorld方法都能正常訪問。但是如果你在瀏覽器url地址欄裡斷行符號,會發生下面錯誤,但並不影響使用。
對於這一錯誤,個人覺得很是奇怪,有待查證。