無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
          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>

          這樣我們就可以寫一個名為OnApplicationLoadjavascript函數,在函數中去調用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(草兒)原創,凡是索引、收藏
          、轉載請注明來處和原文作者。非常感謝。

          posted on 2006-06-10 12:46 草兒 閱讀(288) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 淄博市| 离岛区| 湘潭县| 三原县| 开阳县| 原阳县| 那坡县| 读书| 晋宁县| 闻喜县| 囊谦县| 竹北市| 清水河县| 玉山县| 新丰县| 商城县| 江永县| 汉川市| 古蔺县| 安福县| 北辰区| 丽江市| 德格县| 乐昌市| 泰顺县| 博客| 南岸区| 虎林市| 金秀| 岳阳市| 沁源县| 平乐县| 凤山市| 宿迁市| 桂林市| 浦北县| 民丰县| 游戏| 徐水县| 洞头县| 星子县|