作者:Dflying Chen (http://dflying.cnblogs.com/) 首先,让我们了解一下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 _url; private string _snippet; public SearchResultLite() public SearchResultLite(string title, string url, string snippet) 注意上面的SearchResultLite Class中一定要有一个默认的无参的构造函数,并且每一个字段都要使用属性而不是public的成员,否则Atlas在做与JavaScript对象的转换过程中会出错。 下面来对GoogleSearchService.doGoogleSearch()进行包装: public class GoogleSearchWarpper 这样我们在调用Search方法的时候只需要两个参数即可,并且返回的数据也没有冗余的部分。将其存为GoogleSearchWarpper.cs。 接下来我们要在web.config文件中添加开头申请到的License Key,在后面的步骤中会用到: <appSettings> 下面来看Bridge文件GoogleSearchBridge.asbx的声明: <?xml version=”1.0″ encoding=”utf-8″ ?> 注意到<proxy>段的type属性值被指定为在App_Code中的GoogleSearchWarpper类,也就是使用我们刚刚定义的Proxy对象。对于Search的两个参数: licenseKey的value属性值设置为% appsettings : GoogleWebAPILisenceKey %,这是asbx文件中引入的一个新写法,代表在运行时它的值将被指派为web.config文件中appSettings段中key为GoogleWebAPILisenceKey的值。 <atlas:ScriptManager ID=”scriptManager” runat=”server”> 在添加一段HTML,用来让用户输入查询关键字,引发查询并显示结果: <input id=”tbQuery” type=”text” /> 最后,编写JavaScript,可以看到其中对Sys.StringBuilder的使用: function btnSearch_onclick() { function onSearchComplete(result) { 示例程序可以在此下载:http://www.cnblogs.com/Files/dflying/GoogleSearchBridge.zip 注意:想运行这个示例程序,您需要在web.config中的GoogleWebAPILisenceKey部分填入您申请好的License Key。
在前一篇贴子(在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的调用。
{
private string _title;
public string Title
{
get { return _title; }
set { _title = value; }
}
public string Url
{
get { return _url; }
set { _url = value; }
}
public string Snippet
{
get { return _snippet; }
set { _snippet = value; }
}
{
}
{
_title = title;
_url = url;
_snippet = snippet;
}
}
{
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();
}
}
<add key=”GoogleWebAPILisenceKey” value=”!!input your license key here!!”/>
</appSettings>
<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>
query将由客户端传过来,代表查询的关键字。
到此为止,我们可以在Atlas页面中测试一下了,当然第一步还是在页面上添加ScriptManager,还有对上面Bridge的引用:
<Services>
<atlas:ServiceReference Path=”GoogleSearchBridge.asbx” />
</Services>
</atlas:ScriptManager>
<input id=”btnSearch” type=”button” value=”Search!” onclick=”return btnSearch_onclick()” />
<div id=”result”>
</div>
var tbQuery = new Sys.UI.TextBox($(“tbQuery”));
Dflying.GoogleSearch.Search({query: tbQuery.get_text()}, onSearchComplete);
}
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();
}
在asp.net atlas中调用web service——创建mashup调用远端web service(google search实例)_asp.net技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在asp.net atlas中调用web service——创建mashup调用远端web service(google search实例)_asp.net技巧
相关推荐
-      对.net framework 反射的反思_asp.net技巧
-      .net3.5和vs2008中的asp.net ajax_asp.net技巧
-      使用asp.net ajax框架扩展html map控件_asp.net技巧
-      asp.net应用程序资源访问安全模型_asp.net技巧
-      photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
-      photoshop通道结合图层模式抠狗尾巴草_photoshop教程
-      web.config详解+asp.net优化_asp.net技巧
-      asp.net中多彩下拉框的实现_asp.net技巧