Atlas
給我們提供了一種非常簡單的方式去調用web service,大大的簡化了我們開發的復雜性。在Atlas中標準的調用web service方法是在頁面中添加一個ScriptManager,然后將所需的web service添加到Services Template下,如:<atlas:ScriptManagerID="scriptManager"runat="server"EnableScriptComponents="true"
??????? <Services>
??????? ????<atlas:ServiceReferencePath="~/atlas/samples/services/SimpleService.asmx"/>
??????? </Services>
??? </atlas:ScriptManager>
??? 這樣我們就可以通過如下javascript方法調用到遠程的web service了
?? requestSimpleService = Quickstart.Samples.SimpleService.EchoString(
??????????? document.getElementById('inputName').value,?????? //params
??????????? OnComplete,???? //Complete event
??????????? OnTimeout?????? //Timeout event
??????????? );
這個例子可以在atlas doc工程中找到,非常簡單。然而,當我們需要在頁面加載的時候調用web service的時候,就可能會遇到一定的麻煩了。在atlas doc的示例中也有這個例子,它是通過atlas 擴展的xml-script 客戶端開發模式來調用,即如下代碼:
<scripttype="text/xml-script">
??????? <page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
????????? <components>
??????????? <application id="application" load="OnApplicationLoad" />
????????? </components>
??????? </page>
??? </script>
這樣我們就可以寫一個名為OnApplicationLoad的javascript函數,在函數中去調用web service,同樣非常方便。但是,當我們想用頁面的ClientScript.RegisterStartupScript方法給頁面添加一個加載時自動調用web service的時候,那麻煩就來了,它會提示你,要調用的web service類型未定義。在保證目標web service存在,ServiceReference引用也添加進來的情況下,為什么會出現這樣的錯誤呢?一種可能是web service還沒有被注冊。因為我們用RegisterStartupScript注冊javacript的,那么是不是這里注冊的代碼在atlas客戶端代碼前執行的?沒錯,問題就出在這里。用Fiddler調試頁面請求的過程可以看到有這樣一個請求atlas/atlas/samples/services/SimpleService.asmx/js,它返回的代碼如下:
Type.registerNamespace('Quickstart.Samples');
Quickstart.Samples.SimpleService=new function() {
this.path = "http://localhost:2236/atlas/atlas/samples/services/SimpleService.asmx";
this.appPath = "http://localhost:2236/atlas/";
var cm=Sys.Net.ServiceMethod.createProxyMethod;
cm(this,"EchoString","s");
}
可以看出,這段代碼就是atlas自動幫我們注冊了web service的引用類型,沒有這段類型定義,客戶根本就沒有我們
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。