亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在ASP.NET Atlas中調用Web Service——創建Mashup調用遠端Web Service(Google Search實例)

2019-11-18 17:12:01
字體:
來源:轉載
供稿:網友

作者:Dflying Chen (http://dflying.VEVb.com/
在前一篇貼子(在asp.net Atlas中調用Web Service——創建Mashup調用遠端Web Service(Yahoo!天氣實例))中我介紹了使用BridgeRestPRoxy對Web Service進行Mashup。然而,在實際開發中這種簡單的方法往往是不夠用的,我們需要書寫程序代碼來完成一些復雜邏輯。也就是使用自定義的復雜的Proxy Class,而不是Atlas內建的那幾種加上一些asbx文件中的xml標記。今天我們來接觸一個更復雜的例子:對Google的Search Service進行Mashup,以學習使用自定義的Class來代理對遠端Web Service的調用。

首先,讓我們了解一下Google提供的Service:Google提供給我們開發者一系列的API,您可以到http://api.google.com/查看,對于我們今天要使用的Search API,您還可以到http://api.google.com/googleapi.zip下載它的幫助文檔以及示例程序。在開始這個實例之前,我們必須到http://api.google.com/申請一個Google的License Key,并在每一次對Google的請求中包含這個Key。我大概看了一下Google的文檔,上面說每個License Key每天只允許1000個請求,這樣如果需要在大型的網站上使用Google的Search,恐怕要準備一堆的License Key了……Google可真夠小氣的-_-b。

License Key申請好,我們就可以開始了,當然,如果您是第一次接觸Mashup,可能還要參考一下我的這篇文章:在ASP.NET Atlas中調用Web Service——創建Mashup調用遠端Web Service(基礎知識以及簡單示例)。

首先,使用Visual Studio自帶的wsdl.exe工具,根據Google Web Service的wsdl地址生成出調用它的C#代碼:

wsdl.exe http://api.google.com/GoogleSearch.wsdl

將生成的GoogleSearchService.cs加到我們的Web Site的App_Code目錄中。到這時,我們其實就可以直接使用這個文件中的類了,其中GoogleSearchService.doGoogleSearch()就是我們需要的方法。不過觀察一下這個自動生成的亂糟糟的類,其中有好多別的方法,doGoogleSearch()方法也需要好多參數,所以還是先對這個亂糟糟的文件來個包裝,封裝并簡化一下對它的調用。

在這個示例程序中,對于每條搜索結果,我們只要得到它的Title,URL以及Snippet三個字段。為了減少網絡流量,我們不使用GoogleSearchService.cs中自帶的搜索結果的類,而是自定義一個只包含我們需要內容的SearchResultLite Class:

public class SearchResultLite
{
    private string _title;
    public string Title
    {
        get { return _title; }
        set { _title = value; }
    }

    private string _url;
    public string Url
    {
        get { return _url; }
        set { _url = value; }
    }

    private string _snippet;
    public string Snippet
    {
        get { return _snippet; }
        set { _snippet = value; }
    }

    public SearchResultLite()
    {
    }

    public SearchResultLite(string title, string url, string snippet)
    {
        _title = title;
        _url = url;
        _snippet = snippet;
    }
}

注意上面的SearchResultLite Class中一定要有一個默認的無參的構造函數,并且每一個字段都要使用屬性而不是public的成員,否則Atlas在做與javaScript對象的轉換過程中會出錯。

下面來對GoogleSearchService.doGoogleSearch()進行包裝:

public class GoogleSearchWarpper
{
    public SearchResultLite[] Search(string lisenceKey, string query)
    {
        GoogleSearchService s = new GoogleSearchService();
        GoogleSearchResult result = s.doGoogleSearch(
            lisenceKey,
            query,
            0,
            10,
            false,
            "",
            false,
            "",
            "",
            ""
        );
        List<SearchResultLite> resultLites = new List<SearchResultLite>();
        foreach (ResultElement elem in result.resultElements)
        {
            SearchResultLite resultLite = new SearchResultLite(elem.title, elem.URL, elem.snippet);
            resultLites.Add(resultLite);
        }
        return resultLites.ToArray();
    }
}

這樣我們在調用Search方法的時候只需要兩個參數即可,并且返回的數據也沒有冗余的部分。將其存為GoogleSearchWarpper.cs。

接下來我們要在web.config文件中添加開頭申請到的License Key,在后面的步驟中會用到:

<appSettings>
    <add key="GoogleWebAPILisenceKey" value="!!input your license key here!!"/>
</appSettings>

下面來看Bridge文件GoogleSearchBridge.asbx的聲明:

<?xml version="1.0" encoding="utf-8" ?>
<bridge namespace="Dflying" className="GoogleSearch" >
  <proxy type="GoogleSearchWarpper, App_Code"  />
  <method name="Search">
    <input>
      <parameter name="lisenceKey" value="% appsettings : GoogleWebAPILisenceKey %" serverOnly="true" />
      <parameter name="query" />
    </input>
  </method>
</bridge>

注意到<proxy>段的type屬性值被指定為在App_Code中的GoogleSearchWarpper類,也就是使用我們剛剛定義的Proxy對象。對于Search的兩個參數:

licenseKey的value屬性值設置為% appsettings : GoogleWebAPILisenceKey %,這是asbx文件中引入的一個新寫法,代表在運行時它的值將被指派為web.config文件中appSettings段中key為GoogleWebAPILisenceKey的值。
query將由客戶端傳過來,代表查詢的關鍵字。
到此為止,我們可以在Atlas頁面中測試一下了,當然第一步還是在頁面上添加ScriptManager,還有對上面Bridge的引用:

<atlas:ScriptManager ID="scriptManager" runat="server">
    <Services>
        <atlas:ServiceReference Path="GoogleSearchBridge.asbx" />
    </Services>
</atlas:ScriptManager>

在添加一段HTML,用來讓用戶輸入查詢關鍵字,引發查詢并顯示結果:

<input id="tbQuery" type="text" />
<input id="btnSearch" type="button" value="Search!" onclick="return btnSearch_onclick()" />
<div id="result">
</div>

最后,編寫Javascript,可以看到其中對Sys.StringBuilder的使用:

function btnSearch_onclick() {
    var tbQuery = new Sys.UI.TextBox($("tbQuery"));
    Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}

function onSearchComplete(result) {
    var sbResult = new Sys.StringBuilder();
    for (var i = 0; i < result.length; ++i) {
        sbResult.append("<hr />");
        sbResult.append("<b>" + result[i].Title + "</b><br />");
        sbResult.append("<a href=/"" + result[i].Url + "/" target=/"_blank/" >" + result[i].Url + "</a><br />");
        sbResult.append(result[i].Snippet);
    }
    $('result').innerHTML = sbResult.toString();
}

示例程序可以在此下載:http://www.49028c.com/Files/dflying/GoogleSearchBridge.zip

注意:想運行這個示例程序,您需要在web.config中的GoogleWebAPILisenceKey部分填入您申請好的License Key。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情极品视频| 在线免费观看羞羞视频一区二区| 亚洲free性xxxx护士白浆| 久久视频在线播放| 中文字幕一区电影| 久久视频在线看| 亚洲精品国产精品国自产在线| 久久亚洲一区二区三区四区五区高| 播播国产欧美激情| 日韩成人av网址| 久久天天躁狠狠躁夜夜爽蜜月| 日韩成人中文电影| 欧美日韩亚洲91| www.午夜精品| 国产日韩中文在线| 欧美一级电影久久| 欧美日韩日本国产| 亚洲黄色成人网| 91产国在线观看动作片喷水| 欧美日韩在线视频观看| 九九精品在线播放| 国产精品成人一区二区三区吃奶| 亚洲精品理论电影| 亚洲人成网在线播放| 国产日韩综合一区二区性色av| 97av在线播放| 久久国产加勒比精品无码| 国产精品日日摸夜夜添夜夜av| 欧美洲成人男女午夜视频| 欧美三级xxx| 亚洲第一视频在线观看| 欧美老女人性生活| 亚洲国产精品成人va在线观看| 国产精品美女免费视频| 97激碰免费视频| 影音先锋欧美在线资源| 色综合久久悠悠| 日本久久91av| 国产精品偷伦免费视频观看的| 亚洲欧美日韩精品久久奇米色影视| 一二美女精品欧洲| 成人网址在线观看| 国产欧美 在线欧美| 国产精品毛片a∨一区二区三区|国| 国产亚洲精品久久久优势| 欧美夫妻性视频| 国产精品亚洲欧美导航| 久久久亚洲影院你懂的| 午夜精品久久久久久久白皮肤| 色偷偷av亚洲男人的天堂| 国产日韩在线播放| 色中色综合影院手机版在线观看| 国产精品成av人在线视午夜片| 欧美二区在线播放| 欧美最猛性xxxxx(亚洲精品)| 国产91ⅴ在线精品免费观看| 久久精品国产欧美激情| 欧美精品中文字幕一区| 日韩美女视频免费在线观看| 在线观看欧美视频| 欧洲成人免费视频| 美女国内精品自产拍在线播放| 日韩欧美精品免费在线| 亚洲国产精久久久久久久| 精品久久久视频| 亚洲人午夜精品| www.xxxx精品| 国产精品中文字幕久久久| 日韩欧美中文字幕在线播放| 中文字幕一区日韩电影| 久久亚洲国产精品| 亚洲国内精品视频| 日韩一区二区三区在线播放| 国产美女精品视频免费观看| 国内精品久久久久影院优| 久久99精品国产99久久6尤物| 午夜精品国产精品大乳美女| 97免费中文视频在线观看| 精品国内自产拍在线观看| 深夜福利91大全| 色综合视频一区中文字幕| 日韩在线观看免费全| 一本色道久久综合亚洲精品小说| 国外成人在线视频| 日韩在线免费观看视频| 国产精品久久久久久久久久久久久久| 最近2019中文字幕mv免费看| 精品国产乱码久久久久久虫虫漫画| 亚洲黄色www| 岛国av在线不卡| 亚洲最大福利视频| 日韩中文字幕在线观看| 日韩精品在线电影| 亚洲免费电影在线观看| 国产精品香蕉av| 日韩中文字幕视频在线观看| 日韩美女在线播放| 伊人伊成久久人综合网小说| 亚洲一区二区三区乱码aⅴ蜜桃女| 97视频免费在线看| 91九色视频导航| 一个人看的www久久| 久久艳片www.17c.com| 青青久久aⅴ北条麻妃| 欧美在线视频播放| 91在线网站视频| www日韩欧美| 欧美大成色www永久网站婷| 国产成人一区二区三区| 欧美一区二区三区艳史| 国产日韩在线播放| 欧美精品在线观看| 性金发美女69hd大尺寸| 欧美区在线播放| 国产999精品久久久影片官网| 欧美日韩亚洲成人| 国产丝袜精品第一页| 欧美一乱一性一交一视频| 日韩av影视在线| 国产精品成人一区二区三区吃奶| 久久久精品日本| 第一福利永久视频精品| 久久久亚洲成人| 欧美一乱一性一交一视频| 国产精品永久免费| 久久国产精品偷| 欧美日韩国产影院| 亚洲女人天堂成人av在线| 欧美精品在线播放| 日本在线精品视频| 91欧美精品成人综合在线观看| 美女国内精品自产拍在线播放| 欧美电影免费观看电视剧大全| 亚洲精品欧美日韩| 国产极品精品在线观看| 日韩精品在线第一页| 91av在线免费观看视频| 欧洲亚洲免费视频| 日韩av影视在线| 日韩av有码在线| 成人激情综合网| 欧美丰满少妇xxxx| 中文在线不卡视频| 亚洲欧美www| 欧美日韩国产激情| 亚洲精品国产综合区久久久久久久| 亚洲免费视频网站| 91久久精品日日躁夜夜躁国产| 国产精品久久一区主播| 国产成人短视频| 国产一区二区三区在线看| 亚洲精品一区二三区不卡| 亚洲一区二区三区xxx视频| 久久精品2019中文字幕| 午夜欧美大片免费观看| 视频直播国产精品| 亚洲欧美国产精品久久久久久久| 久久香蕉国产线看观看网| 国产成人免费av电影| 亚洲国产美女精品久久久久∴| 国产精品第二页| 色www亚洲国产张柏芝| 亚洲大胆人体视频| 国产在线视频91|