动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP.NET技巧 ]的信息



本月文章推荐
.浅谈在ASP.NET中数据有效性校验的.
.两个简单方法加速DataGridView.
.运用每个开发者都必须了解的十个.
.asp.net 2.0 权限树的控制.
.aspx页面中标题单点解决方案.
.COOKIE问题.
.正则学习:组的定义及引用方式.
.Web.config详解+asp.net优化.
.在.net中创建使用全球唯一标识符.
.如何取得IP/用户名等信息.
.lucene并行建索引解决方案.
.那数组存入application,再利用循.
.ASP.NET AJAX正式版带来的Valida.
.给Asp.Net初学者的关于继承和多态.
.最新版FreeTextBox(版本3.1.6)在.
.认识ASP.NET配置文件Web.config.
.使用FileUpload控件上传图片并自.
.asp.net(C#)海量数据表高效率分页.
.在ASP.NET中点击一个按钮后让它变.
.正则表达式在网页处理中的应用四.

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

发表日期:2006-5-28 |


作者: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/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.cnblogs.com/Files/dflying/GoogleSearchBridge.zip

注意:想运行这个示例程序,您需要在web.config中的GoogleWebAPILisenceKey部分填入您申请好的License Key。

上一篇:dotnet下生成简单sql语句 人气:5006
下一篇:巧用VS2005解决VS2005网站发布不便问题 人气:9025
浏览全部Web Service的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-19 Roclog v3.1.4 SP1
2008-7-19 马克斯CMS(Maxcms) v1.1 Build 0
2008-7-19 乐学LBBS无限级目录图片直读系统
2008-7-19 PHP在线考试系统PPExam v1.2.5
2008-7-19 APJE私服发布系统 v2.0
2008-7-19 寻觅图书管理系统 v1.12
2008-7-19 寻觅学校管理系统
2008-7-19 义乌网站目录baidu新闻订阅 v1.0
2008-7-19 牛仔IIS日志蜘蛛爬行记录分析器
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵