在ASP.NET Atlas中調用Web Service——創建Mashup調用遠端Web Service(基礎知識以及簡單示例)...

作者:Dflying Chen (http://dflying.cnblogs.com/)

注:Atlas中的Mashup極其復雜,其中涉及眾多的對象與架構,為了寫這篇文章,我花了不少時間學習研究。同時,關于這方面資源的匱乏簡直到了令人發指的地步。往往Google一下居然一條記錄都沒有……但Mashup在現今的AJAX程序中又是如此重要,近一段時間內,我也收到了好多朋友的消息,希望我能介紹一下Mashup的心得,這里我就斗膽獻丑了。但目前為止,我對Atlas中的Mashup也只是粗通皮毛,所以這個系列中將僅僅通過一些實例應用來順便說出我的理解,其中一定有很多錯誤疏漏之處,還請各位不吝斧正!也歡迎大家探討實際項目中遇到的問題。

對于傳統的Web程序,瀏覽器只與一臺服務器進行通信,并從這臺服務器上得到所有信息。同時出于安全考慮,頁面上的JavaScript也只允許和同一臺服務器通信。而隨著目前Internet的發展,越來越多的Web Service分散在互聯網的各處,作為開發人員的我們自然希望能夠充分利用這些已經存在的Service,這時,我們就需要對遠端的Web Service做以Mashup。這是一項常見的需求,也是一項重復性很高的勞動,幸運的是,ASP.NET Atlas充分認識到了這一點,并對此有著強大的內建支持。

Atlas通過引入一種新的HTTP模塊——asbx文件(其中b代表Bridge),來實現對遠端Web Service請求的Mashup。asbx文件其實是一個結構化的XML文檔,里面包含了對遠端Web Service方法的封裝,當然,您也可以同時指定一個CodeBehind CS文件用來對其進行一些復雜的控制。asbx文件和aspx文件位于同一臺主機上。Atlas網站在編譯的時候會根據asbx中的聲明以及相應的CodeBehind文件(如果存在)將其編譯并注冊。這樣當客戶端JavaScript調用該asbx中定義的方法時,asbx會將其轉發給實際的Web Service并將返回結果會送給客戶端,起到一個Bridge的作用。而對于客戶端,就和直接調用 同一主機上的Web Service沒什么不一樣。

如果您安裝過Atlas的msi文件,并建立了一個Atlas Web Site,那么下面的配置已經為您做好了。否則,啟用asbx的支持,您需要如下的操作:

  1. 在IIS的虛擬目錄下按照下圖所示,添加.asbx文件的映射。
    bridge1-1.jpg
  2. 在web.config的sectionGroup段添加:

None.gif<section?name="webServices"?type="Microsoft.Web.Configuration.WebServicesSection"?/>
  1. 在web.config的compilation段添加:

None.gif<buildProviders>
None.gif???
<add?extension=".asbx"?type="Microsoft.Web.Services.BridgeBuildProvider"/>
None.gif
</buildProviders>

  1. 在web.config的httphandlers段添加:
None.gif<add?verb="*"?path="*.asbx"?type="Microsoft.Web.Services.ScriptHandlerFactory"?validate="false"/>
  1. 在web.config的httpmodules段添加:
None.gif<add?name="BridgeModule"?type="Microsoft.Web.Services.BridgeModule"/>

下面讓我們通過一個最簡單的示例學習Atlas中Mashup的基本概念和asbx文件的基本結構。

首先,編寫一個Web Service用來模擬在Internet上存在的一個服務。當然,這個服務沒什么實際用處,僅僅是求兩個integer的和:

None.gifusing?System;
None.gif
using?System.Web;
None.gif
using?System.Web.Services;
None.gif
using?System.Web.Services.Protocols;
None.gif
None.gif[WebService(Namespace?
=?"http://www.dflying.net/")]
None.gif[WebServiceBinding(ConformsTo?
=?WsiProfiles.BasicProfile1_1)]
None.gif
public?class?SimpleWebService?:?System.Web.Services.WebService
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif????[WebMethod]
InBlock.gif????
public?int?Add(int?value1,?int?value2)
ExpandedSubBlockStart.gifContractedSubBlock.gif????
dot.gif{
InBlock.gif????????
return?value1?+?value2;
ExpandedSubBlockEnd.gif????}

ExpandedBlockEnd.gif}

我將這個Web Service置于另外一臺主機的IIS上,注意:我們應該更改web.config文件以允許通過HTTP GET對Web Service的訪問,而不僅僅是默認的POST:
None.gif<webServices>
None.gif??
<protocols>
None.gif????
<add?name="HttpGet"/>
None.gif??
</protocols?>
None.gif
</webServices>

完成之后,您可以在瀏覽器中測試一下,訪問:http://dflyingchen/MyServices/SimpleWebService.asmx/Add?value1=1&value2=2(不要忘記更改前面相應的主機名),如果你能得到下圖所示的結果,那么恭喜你,Web Service沒問題了。
bridge1-2.jpg

下面就是最有“技術含量”的asbx文件了:

None.gif<?xml?version="1.0"?encoding="utf-8"??>
None.gif
<bridge?namespace="Test"?className="SimpleWebService">
None.gif
None.gif??
<proxy?type="Microsoft.Web.Services.BridgeRestProxy"?
None.gif?????????serviceUrl
="http://dflyingchen/MyServices/SimpleWebService.asmx/Add"?/>
None.gif
None.gif??
<method?name="Add">
None.gif????
<input>
None.gif??????
<parameter?name="value1"?/>
None.gif??????
<parameter?name="value2"?/>
None.gif????
</input>
None.gif??
</method>
None.gif
</bridge>

注意到作為一個合法的XML文件,asbx文件第一行是XML的聲明。然后,對于本asbx文件,有如下部分:
  1. bridge段,聲明該mashup的namespaceclass name。注意這兩個屬性代表的是客戶端調用時所見的被mashup過的namespace和class name,并不是遠端Web Service的namespace和class name。
  2. proxy段,聲明該mashup的類型,這里我們指定為Microsoft.Web.Services.BridgeRestProxy相應的,指定一個代表服務URL的string:http://dflyingchen/MyServices/SimpleWebService.asmx/Add 。
  3. method段,您可以添加多個method段,每一個代表一個定義在上述URL中的服務。這里我們指定了Method的名稱,同樣的,它代表的僅是客戶端調用的名稱(這樣客戶端將以namespace.classname.methodname()的方式調用該mashup)。
  4. input段,其中通過parameter標記聲明了該方法的參數。parameter標記中的name屬性代表參數名,注意這里聲明的參數名要和遠端Web Method的參數名保持一致。這里我們聲明了兩個參數,與上面定義的Web Method的兩個參數對應。

到此為止,一個最簡單的asbx文件就完成了。當然,上述介紹與完備相距甚遠。關于asbx文件中的其它可選聲明,目前并沒有官方文檔,我只能在接下來的幾個例子中根據使用情況適當介紹。

我們再來建立一個Atlas Page測試一下該mashup,首先添加一個ScriptManager,并添加對上述mashup的引用,注意擴展名為asbx,不要寫習慣了就直接寫成了asmx:

None.gif<atlas:ScriptManager?ID="sm"?runat="server">
None.gif????
<Services>
None.gif????????
<atlas:ServiceReference?Path="SimpleBridge.asbx"?/>
None.gif????
</Services>
None.gif
</atlas:ScriptManager>

然后添加一段HTML,用來提供用戶輸入,引發調用并顯示結果;
None.gif<input?id="input1"?type="text"?value="1"?size="3"?/>
None.gif
<input?id="input2"?type="text"?value="2"?size="3"?/>
None.gif
<input?id="doAdd"?type="button"?value="Add"?onclick="return?doAdd_onclick()"?/>
None.gif
<div?id="result"?/>

最后,一小段JavaScript調用mashup方法:
None.giffunction?doAdd_onclick()?{
None.gif????var?int1?=?$('input1').value;
None.gif????var?int2?=?$('input2').value;
None.gif????Test.SimpleWebService.Add({'value1':?int1,'value2':?int2},?onAddComplete);
None.gif}
None.giffunction?onAddComplete(result)?{
None.gif????$('result').innerHTML?=?"Result?is:?"?+?result;
None.gif}

注意調用方法的簽名是Test.SimpleWebService.Add(),其中的每一部分都在asbx文件中有所聲明。另外,返回值是一個XML string,這里為了簡化,就直接輸出到頁面上了。

瀏覽器中如下:
bridge1-3.jpg

示例程序源代碼可以在此下載:http://files.cnblogs.com/dflying/SimpleBridgeDemo.rar

在接下來的幾個實例中,我將對一些“真實有用”的Web Service進行mashup并應用到我們的程序中。

轉載于:https://www.cnblogs.com/dflying/archive/2006/05/24/Atlas_and_Web_Service__Calling_Remote_Service_by_Creating_Mashup__Introduction_and_Basic_Demo.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392494.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392494.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392494.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java彈框形式輸入_java中點擊一個按鈕彈出兩個輸入文本框的源代碼

展開全部寫了一個很簡單的案例,可以參考和修改import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import…

sap wm內向交貨步驟_內向型人在數據科學中成功的五個有效步驟

sap wm內向交貨步驟Just like most attributes of humans, including both the bright and dark sides, being an introvert is no exception. This article was not written to inspire you as most articles about data science or engineering do. What we want is that by …

C# 學習之路--百度網盤爬蟲設計與實現(一)

百度網盤爬蟲 現在市面上出現了很多網盤搜索引擎&#xff0c;寫這系列博文及爬蟲程序的初衷&#xff1a; 更方面的查找資源學習C#學習爬蟲的設計與實現記錄學習歷程自我監督 能力有限&#xff0c;如有不妥之處&#xff0c;還請各位看官點評。同在學習的網友~與君共勉。工具/庫選…

實習生對企業的認識_如何成為您認識的超級明星實習生

實習生對企業的認識by Maple Ong由Maple Ong 如何成為您認識的超級明星實習生 (How to be The Superstar Intern You Know You Are) 遏制冒名頂替綜合癥&#xff0c;為即將到來的軟件工程實習做準備 (Curb the Impostor Syndrome and get prepared for your upcoming Software…

7時過2小時是幾時_2017最北師大版二年級下冊數學第七單元《時、分、秒》過關檢測卷...

二年級數學下冊時分秒測試卷一、填一填。(每空1分&#xff0c;共36分)1.鐘面上有()大格&#xff0c;()個小格&#xff0c;時針走1個大格是()時&#xff0c;分針走一個大格是()分。2.1分()秒()分1時1分15秒()秒3.1小時20分()分90分()小時()分 70秒()分()秒4.用時、分、秒填空a)我…

在沒人相信的時候,你的堅持才真正可貴

2018 世界 VR 產業大會在南昌開幕&#xff0c;阿里巴巴創始人馬云在演講中說&#xff1a; “在人人都相信一個產業的時候&#xff0c;其實你已經沒有機會了。在沒有人相信的時候&#xff0c;你的堅持才是真正的珍貴。很多人是因為看見而相信&#xff0c;只有很少數的人是因為相…

leetcode 49. 字母異位詞分組(排序+hash)

給定一個字符串數組&#xff0c;將字母異位詞組合在一起。字母異位詞指字母相同&#xff0c;但排列不同的字符串。 示例: 輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 代碼 class S…

數據庫備份策略 分布式_管理優秀的分布式數據團隊的4種基本策略

數據庫備份策略 分布式COVID-19 has forced nearly every organization to adapt to a new workforce reality: distributed teams. We share four key tactics for turning your remote data team into a force multiplier for your entire company.COVID-19迫使幾乎每個組織都…

如何使用阿里云云解析API實現動態域名解析,搭建私有服務器

原文地址&#xff1a;http://www.yxxrui.cn/article/116.shtml 未經許可請勿轉載&#xff0c;如有疑問&#xff0c;請聯系作者&#xff1a;yxxrui163.com 公司的網絡沒有固定的公網IP地址&#xff0c;但是能夠保證的是&#xff0c;每次動態分配的IP地址均為獨立的公網IP&#x…

新手指南:dvwa_如何構建基本的Slackbot:新手指南

新手指南:dvwaBy Vishwa ShahVishwa Shah著 Update: code and tutorial updated on June 28 to reflect Slack API changes.更新&#xff1a;代碼和教程已于6月28日更新&#xff0c;以反映Slack API的更改 。 Slackbots&#xff1a;為什么要使用它們&#xff1f; (Slackbots:…

java 加載class文件路徑_動手實現MVC: 1. Java 掃描并加載包路徑下class文件

背景用過spring框架之后&#xff0c;有個指定掃描包路徑&#xff0c;然后自動實例化一些bean&#xff0c;這個過程還是比較有意思的&#xff0c;抽象一下&#xff0c;即下面三個點如何掃描包路徑下所有的class文件如何掃描jar包中對應包路徑下所有的class文件如何加載class文件…

leetcode 738. 單調遞增的數字(貪心算法)

給定一個非負整數 N&#xff0c;找出小于或等于 N 的最大的整數&#xff0c;同時這個整數需要滿足其各個位數上的數字是單調遞增。 &#xff08;當且僅當每個相鄰位數上的數字 x 和 y 滿足 x < y 時&#xff0c;我們稱這個整數是單調遞增的。&#xff09; 示例 1: 輸入: …

python+[:]+切片_我從C ++到Python的方式:概念上的改變

python[:]切片by asya f由asya f 我從C 到Python的方式&#xff1a;概念上的改變 (How I went from C to Python: a conceptual change) 介紹 (Introduction) People say that coding in Python is so easy that even a 6 year old can do it. This was the thought that I ha…

深度學習 免費課程_2020年排名前三的免費深度學習課程

深度學習 免費課程&#xff03;1 Fastai面向程序員的實用深度學習2020 (#1 Fastai Practical Deep Learning for Coders 2020) On 21 of August 2020, fastai released the new version of the fastai library and of their Deep Learning course!2020年8月21日&#xff0c;fas…

mysql復制主從集群搭建

近期搭了個主從復制。中間出了點小問題&#xff0c;排查搞定&#xff0c;記錄下來1環境&#xff1a;虛擬機&#xff1a;OS:centos6.5Linux host2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/LinuxserverIP192.168.18.66192.168.18.6…

java jolt tuxedo_java通過jolt調用tuxedo服務.xls

java通過jolt調用tuxedo服務.xls還剩20頁未讀&#xff0c;繼續閱讀下載文檔到電腦&#xff0c;馬上遠離加班熬夜&#xff01;親&#xff0c;喜歡就下載吧&#xff0c;價低環保&#xff01;內容要點&#xff1a;?private bea.jolt.pool.servlet.ServletSessionPoolManager bool…

你的周末時光是什么樣的?

周末是一個特殊的假日&#xff0c;隔三差五就會有&#xff0c;來的容易去得也容易&#xff0c;即便如此&#xff0c;我們還是應該好好珍惜&#xff0c;周末可以做的事太多了&#xff0c;既可以用來減壓&#xff0c;也可以為下一周的學習和工作充電&#xff0c;不管做什么&#…

leetcode 290. 單詞規律(hash)

給定一種規律 pattern 和一個字符串 str &#xff0c;判斷 str 是否遵循相同的規律。 這里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每個字母和字符串 str 中的每個非空單詞之間存在著雙向連接的對應規律。 示例1: 輸入: pattern “abba”, str “dog…

2019年微博用戶畫像_2019年您需要了解的有關用戶的信息

2019年微博用戶畫像by Yisroel Yakovson通過伊斯洛爾雅科夫森 2019年您需要了解的有關用戶的信息 (What You Need to Know About Your Users in 2019) Users have changed a lot in the last few years. We programmers may have a culture gap to overcome in this area. If …

使用lt;jsp:includegt;,不想寫死URL,動態生成URL的解決的方法

JSP中文件包括有2種方式&#xff0c;靜態包括和動態包括。靜態包括使用<% include file"" %>。動態包括使用<jsp:include page"" />。本文不打算介紹這2種方式的差別和使用場景&#xff0c;主要關注page和file屬性的路徑問題。 假設事先知道被…