特色栏目

ASP源码

PHP源码

.NET源码

JSP源码

游戏频道
专题合集
关闭菜单
首页> ASP.NET教程> 在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(Google Search实例)

在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(Google Search实例)

时间:2009-06-30 16:41:30 作者:互联网

作者:Dflying Chen (http://dflying.cnblogs.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/申请一个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

将生成的Go***eSearchService.cs加到我们的Web Site的App_Code目录中。到这时,我们其实就可以直接使用这个文件中的类了,其中Go***eSearchService.doGoogleSearch()就是我们需要的方法。不过观察一下这个自动生成的乱糟糟的类,其中有好多别的方法,doGoogleSearch()方法也需要好多参数,所以还是先对这个乱糟糟的文件来个包装,封装并简化一下对它的调用。

在这个示例程序中,对于每条搜索结果,我们只要得到它的Title,URL以及Snippet三个字段。为了减少网络流量,我们不使用Go***eSearchService.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对象的转换过程中会出错。

下面来对Go***eSearchService.doGoogleSearch()进行包装:

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

这样我们在调用Search方法的时候只需要两个参数即可,并且返回的数据也没有冗余的部分。将其存为Go***eSearchWarpper.cs

接下来我们要在we***onfig文件中添加开头申请到的License Key,在后面的步骤中会用到:


   

下面来看Bridge文件Go***eSearchBridge.asbx的声明:



 
 
   
     
     
   
 

注意到段的type属性值被指定为在App_Code中的GoogleSearchWarpper类,也就是使用我们刚刚定义的Proxy对象。对于Search的两个参数:

licenseKey的value属性值设置为% appsettings : GoogleWebAPILisenceKey %,这是asbx文件中引入的一个新写法,代表在运行时它的值将被指派为we***onfig文件中appSettings段中key为GoogleWebAPILisenceKey的值。
query将由客户端传过来,代表查询的关键字。
到此为止,我们可以在Atlas页面中测试一下了,当然第一步还是在页面上添加ScriptManager,还有对上面Bridge的引用:


   
        Go***eSearchBridge.asbx" />
   

在添加一段HTML,用来让用户输入查询关键字,引发查询并显示结果:




最后,编写JavaScript,可以看到其中对Sy***tringBuilder的使用:

function btnSearch_onclick() {
    var tbQuery = new Sy***I.TextBox($("tbQuery"));
    Df***ng.GoogleSearch.Search({'query': tb***ry.get_text()}, onSearchComplete);
}

function onSearchComplete(result) {
    var sbResult = new Sy***tringBuilder();
    for (var i = 0; i < re***t.length; ++i) {
        sb***ult.append("


");
        sb***ult.append("" + result[i].Title + "
");
        sb***ult.append("" + result[i].Url + "
");
        sb***ult.append(result[i].Snippet);
    }
    $('result').innerHTML = sb***ult.toString();
}

示例程序可以在此下载:we***onfig中的GoogleWebAPILisenceKey部分填入您申请好的License Key。

相关文章 最新文章

相关应用

热门文章

猜你喜欢

返回顶部