在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)...
注:Atlas中的Mashup極其復(fù)雜,其中涉及眾多的對(duì)象與架構(gòu),為了寫這篇文章,我花了不少時(shí)間學(xué)習(xí)研究。同時(shí),關(guān)于這方面資源的匱乏簡(jiǎn)直到了令人發(fā)指的地步。往往Google一下居然一條記錄都沒有……但Mashup在現(xiàn)今的AJAX程序中又是如此重要,近一段時(shí)間內(nèi),我也收到了好多朋友的消息,希望我能介紹一下Mashup的心得,這里我就斗膽獻(xiàn)丑了。但目前為止,我對(duì)Atlas中的Mashup也只是粗通皮毛,所以這個(gè)系列中將僅僅通過一些實(shí)例應(yīng)用來順便說出我的理解,其中一定有很多錯(cuò)誤疏漏之處,還請(qǐng)各位不吝斧正!也歡迎大家探討實(shí)際項(xiàng)目中遇到的問題。
對(duì)于傳統(tǒng)的Web程序,瀏覽器只與一臺(tái)服務(wù)器進(jìn)行通信,并從這臺(tái)服務(wù)器上得到所有信息。同時(shí)出于安全考慮,頁(yè)面上的JavaScript也只允許和同一臺(tái)服務(wù)器通信。而隨著目前Internet的發(fā)展,越來越多的Web Service分散在互聯(lián)網(wǎng)的各處,作為開發(fā)人員的我們自然希望能夠充分利用這些已經(jīng)存在的Service,這時(shí),我們就需要對(duì)遠(yuǎn)端的Web Service做以Mashup。這是一項(xiàng)常見的需求,也是一項(xiàng)重復(fù)性很高的勞動(dòng),幸運(yùn)的是,ASP.NET Atlas充分認(rèn)識(shí)到了這一點(diǎn),并對(duì)此有著強(qiáng)大的內(nèi)建支持。
Atlas通過引入一種新的HTTP模塊——asbx文件(其中b代表Bridge),來實(shí)現(xiàn)對(duì)遠(yuǎn)端Web Service請(qǐng)求的Mashup。asbx文件其實(shí)是一個(gè)結(jié)構(gòu)化的XML文檔,里面包含了對(duì)遠(yuǎn)端Web Service方法的封裝,當(dāng)然,您也可以同時(shí)指定一個(gè)CodeBehind CS文件用來對(duì)其進(jìn)行一些復(fù)雜的控制。asbx文件和aspx文件位于同一臺(tái)主機(jī)上。Atlas網(wǎng)站在編譯的時(shí)候會(huì)根據(jù)asbx中的聲明以及相應(yīng)的CodeBehind文件(如果存在)將其編譯并注冊(cè)。這樣當(dāng)客戶端JavaScript調(diào)用該asbx中定義的方法時(shí),asbx會(huì)將其轉(zhuǎn)發(fā)給實(shí)際的Web Service并將返回結(jié)果會(huì)送給客戶端,起到一個(gè)Bridge的作用。而對(duì)于客戶端,就和直接調(diào)用 同一主機(jī)上的Web Service沒什么不一樣。
如果您安裝過Atlas的msi文件,并建立了一個(gè)Atlas Web Site,那么下面的配置已經(jīng)為您做好了。否則,啟用asbx的支持,您需要如下的操作:
???<add?extension=".asbx"?type="Microsoft.Web.Services.BridgeBuildProvider"/>
</buildProviders>
下面讓我們通過一個(gè)最簡(jiǎn)單的示例學(xué)習(xí)Atlas中Mashup的基本概念和asbx文件的基本結(jié)構(gòu)。
首先,編寫一個(gè)Web Service用來模擬在Internet上存在的一個(gè)服務(wù)。當(dāng)然,這個(gè)服務(wù)沒什么實(shí)際用處,僅僅是求兩個(gè)integer的和:
using?System;using?System.Web;
using?System.Web.Services;
using?System.Web.Services.Protocols;
[WebService(Namespace?=?"http://www.dflying.net/")]
[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
public?class?SimpleWebService?:?System.Web.Services.WebService
{
????[WebMethod]
????public?int?Add(int?value1,?int?value2)
????{
????????return?value1?+?value2;
????}
}
我將這個(gè)Web Service置于另外一臺(tái)主機(jī)的IIS上,注意:我們應(yīng)該更改web.config文件以允許通過HTTP GET對(duì)Web Service的訪問,而不僅僅是默認(rèn)的POST: <webServices>
??<protocols>
????<add?name="HttpGet"/>
??</protocols?>
</webServices> 完成之后,您可以在瀏覽器中測(cè)試一下,訪問:http://dflyingchen/MyServices/SimpleWebService.asmx/Add?value1=1&value2=2(不要忘記更改前面相應(yīng)的主機(jī)名),如果你能得到下圖所示的結(jié)果,那么恭喜你,Web Service沒問題了。
下面就是最有“技術(shù)含量”的asbx文件了:
<?xml?version="1.0"?encoding="utf-8"??><bridge?namespace="Test"?className="SimpleWebService">
??<proxy?type="Microsoft.Web.Services.BridgeRestProxy"?
?????????serviceUrl="http://dflyingchen/MyServices/SimpleWebService.asmx/Add"?/>
??<method?name="Add">
????<input>
??????<parameter?name="value1"?/>
??????<parameter?name="value2"?/>
????</input>
??</method>
</bridge>
注意到作為一個(gè)合法的XML文件,asbx文件第一行是XML的聲明。然后,對(duì)于本asbx文件,有如下部分:
到此為止,一個(gè)最簡(jiǎn)單的asbx文件就完成了。當(dāng)然,上述介紹與完備相距甚遠(yuǎn)。關(guān)于asbx文件中的其它可選聲明,目前并沒有官方文檔,我只能在接下來的幾個(gè)例子中根據(jù)使用情況適當(dāng)介紹。
我們?cè)賮斫⒁粋€(gè)Atlas Page測(cè)試一下該mashup,首先添加一個(gè)ScriptManager,并添加對(duì)上述mashup的引用,注意擴(kuò)展名為asbx,不要寫習(xí)慣了就直接寫成了asmx:
<atlas:ScriptManager?ID="sm"?runat="server">????<Services>
????????<atlas:ServiceReference?Path="SimpleBridge.asbx"?/>
????</Services>
</atlas:ScriptManager>
然后添加一段HTML,用來提供用戶輸入,引發(fā)調(diào)用并顯示結(jié)果; <input?id="input1"?type="text"?value="1"?size="3"?/>
<input?id="input2"?type="text"?value="2"?size="3"?/>
<input?id="doAdd"?type="button"?value="Add"?onclick="return?doAdd_onclick()"?/>
<div?id="result"?/> 最后,一小段JavaScript調(diào)用mashup方法: function?doAdd_onclick()?{
????var?int1?=?$('input1').value;
????var?int2?=?$('input2').value;
????Test.SimpleWebService.Add({'value1':?int1,'value2':?int2},?onAddComplete);
}
function?onAddComplete(result)?{
????$('result').innerHTML?=?"Result?is:?"?+?result;
} 注意調(diào)用方法的簽名是Test.SimpleWebService.Add(),其中的每一部分都在asbx文件中有所聲明。另外,返回值是一個(gè)XML string,這里為了簡(jiǎn)化,就直接輸出到頁(yè)面上了。
瀏覽器中如下:
示例程序源代碼可以在此下載:http://files.cnblogs.com/dflying/SimpleBridgeDemo.rar
在接下來的幾個(gè)實(shí)例中,我將對(duì)一些“真實(shí)有用”的Web Service進(jìn)行mashup并應(yīng)用到我們的程序中。
轉(zhuǎn)載于:https://www.cnblogs.com/dflying/archive/2006/05/24/Atlas_and_Web_Service__Calling_Remote_Service_by_Creating_Mashup__Introduction_and_Basic_Demo.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到狗跟着我什么预兆
- 下一篇: 通过在Chipotle用餐了解模板方法设