• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

icehyp

icehyp
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

如何创建和使用Web服务(WebServices)

http://www.microsoft.com/china/MSDN/library/WebServices/default.mspx

如何创建和使用Web服务
简介

.NET最强大的一个方面之一就是可以利用它创建Web服务。一个Web服务就是一个网站所提供的供其它网站调用的外部接口。举个例子来说,某个金融公司可以为与它的贸易伙伴通过Web服务提供详细的股票报价,这些信息可以是通过Web页面进行读取和显示的,也可以是从客户的桌面电脑的应用程序里读取的。

本文就对Web服务的其中两个方面进行说明:一是如何创建Web服务;二是如何使用Web服务。作为例子,我们以来自ASPFAQs.com(http://www.aspfaqs.com/aspfaqs/)的FAQS(常见问题解答)的Web服务来解释如何创建一个Web服务。

创建Web服务

在你创建一个Web服务之前,你首先必须问问自己:“我要向我的用户提供什么服务?”。本文的目标就是创建这样一个Web服务:让其它的用户在他们自己的网站上显示来自ASPFAQs.com的常见问题解答(FAQS)的列表。比较理想的功能是限制其他的网站只能够查看FAQS分类和按分类排列的FAQS,如果你想查看一个问题的答案,就让用户去访问提供服务的网站http://www.aspfaqs.com。本文例子的Web服务最终向其他网站提供如下的功能:

1,浏览所有FAQ分类的列表
2,浏览某一分类里的所有FAQS。
3,浏览某一个FAQ的问题,但不包含答案。
创建一个Web服务是很简单的,首先创建一个.asmx文件(你可以用Visual Studio .NET或你自己喜欢的任何文本编辑器,推荐使用Web Matrix,它有创建Web服务的模板),Web服务作为一个普通的类进行创建,在方法的前面有一个宏,表明这个方法是通过Web服务来访问的。

就ASPFAQS.com的Web服务来说,首先创建三个通过Web服务访问的方法,GetCategories, GetFAQsInCategory和GetFAQ,分别实现上面提出的任务1,2,3。并创建一个私有方法GetDataSet,按传递过来的SQL查询组装成一个DataSet。下面就是实现的代码:

 <%@ WebService Language="VB" Class="ASPFAQs" %>
 Imports System.Web.Services
 Imports System.Data
 Imports System.Data.SqlClient
 Imports System.Configuration
 
 Public Class ASPFAQs
 
   ' 创建私有功能方法GetDataSet
   Private Function GetDataSet(strSQL as String) as DataSet
     '1. 创建一个SqlConnection连接对象
     Dim myConnection as New SqlConnection(ConnectionString)
 
     '2. 创建COMMAND对象,传入SQL参数
     Dim myCommand as New SqlCommand(strSQL, myConnection)
 
     myConnection.Open()
 
     '3. 创建DataAdapter对象
     Dim myDataAdapter as New SqlDataAdapter()
     myDataAdapter.SelectCommand = myCommand 
 
     '4. 生成DataSet并关闭连接
     Dim myDataSet as New DataSet()
     myDataAdapter.Fill(myDataSet)
     myConnection.Close()
    
     '返回DataSet
     Return myDataSet 
   End Function
    
   ' 创建实现实现三个任务的方法
   <WebMethod()> Public Function GetCategories() as DataSet
     Return GetDataSet(SQL Query) '这里的参数SQL用来得到所有FAQ分类
   End Function
 
 
   <WebMethod()> Public Function GetFAQsInCategory(catID as Integer) as DataSet
     Return GetDataSet(SQL Query) '这里的参数SQL用来得到某分类(catID)的所有FAQ
   End Function
  
 
   <WebMethod()> Public Function GetFAQ(FAQID as Integer) as DataSet
     Return GetDataSet(SQL Query) '这里的参数SQL用来得到某FAQ(FAQID)的信息
   End Function
 End Class
正如前面所说的那样,三个通过Web服务访问的方法都有前导符,在.asmx文件的第一行有一个@WebService标明所使用的语言和类名。这个Web服务名为ASPFAQs,和类同名。一旦创建好了.asmx文件,就把它保存到可通过Web访问的目录下,然后就可以通过Web浏览器进行访问。例如:假如Web服务文件名字是ASPFAQs.asmx,并保存到/WS目录下,这样任何人就可以通过http://aspnet.4guysfromrolla.com/WS/ASPFAQs.asmx进行访问,就可以看到Web服务使用的所有公共方法,你还可以提供输入参数看到返回的结果。

需要说明的是:你在进行需要参数的Web服务的方法的调用时,不必担心传入参数的类型是否正确,Web服务代码会自动确保传入参数类型的正确性,在上面的例子中参数类型为整型,如果恶意的用户企图向Web服务传入象0 'malicious SQL statement这样的参数,就会返回错误的信息:annot convert 0 'malicious SQL to System.Int32. Parameter name: type --> Input string was not in a correct format。然而,如果你传入字符串类型的参数,你应当记住把单个撇号(’)替换成两个连续的撇号('')。

使用Web服务

上面,我们创建了Web服务,下面就看看别的网站如何使用这个Web服务。为了方便起见,我们把使用Web服务的客户网站叫做“消费者”,把提供Web服务网站就“生产者”。最本质的东西就是消费者必须知道要调用生产者的什么方法。如果需要参数的话,这些参数必须转换成XML格式进行传入,消费者向生产者发送HTTP请求,并指明要调用的方法和参数,参数可以是通过QueryString形式的SOAP请求或者是以POST的请求头的形式进行传递。

生产者收到发送过来的请求后,对输入参数进行解包,并调用指定类的适当的方法。如果调用完成,就把结果返回,进行打包,然后发送回消费者。消费者收到响应结果,进行解包,就完成了Web服务的调用。

很明显,其实我们在使用Web服务时一点也不用担心发送的HTTP信息的语义,为了达到这样的目的,我们可以使用一个叫做Proxy的类,Proxy的作用是充当消费者应用程序或Web页面和生产者实际Web服务之间的中间过程。对生产者Web服务的每一个方法来说,同时也在Proxy类里有一个相同的方法,Proxy的职责就是处理所有传送的复杂消息,这种复杂性在Proxy类里被隐藏起来的,我们只需要简单地调用该类的方法即可,不必关心语义的事情。

此时你也许很迷惑,但这种迷惑也是可以理解的,这本身就是一个很令人迷惑的话题。要理解的最基本的事情就是:当调用Web服务时消费者和生产者之间的HTTP通信可能是复杂的,而且可能会需要编写不少的代码。我们更愿意看到的是,使用Web服务的页面调用Web服务时就象使用一个本地的组件一样方便,为了实现这一目标,我们使用Proxy类,它的公用接口与Web服务的方法相对应。如果你此时还感到迷惑的话,请看看这个演示文档http://aspnet.4guysfromrolla.com/code/ConsumeWS.ppt,它将向你解释如何使用Web服务。

利用Visual Studio .NET创建Proxy类

在Visual Studio .NET里创建Web服务使用的Proxy类是件轻而易举的事情,在ASP.NET Web项目里,在“引用”上单击右键,选择“添加Web引用”,这时会弹出一个对话框,要你输入一个URL地址,请输入http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx,然后你就会看到这个Web服务的描述(就象你在Web浏览器里直接看到的那样),最后单击“添加引用”按钮,Visual Studio .NET会自动为你创建一个Proxy类,并且进行编译。当你把它添加进你的工程里时,Proxy类的名称空间可能就是你的网站地址,比如:com.4guysfromrolla.aspnet,当然你还可以任意改成其他的任何名字。从你的Web页面里通过Proxy类调用Web服务就象你使用本地组件进行调用一样方便。假设你想显示ASP.NET类别(category ID为22)FAQS的列表,我们可以通过调用Web服务的GetFAQsInCategory方法,在参数里传入22,并把返回的DataSet绑定到一个DataGrid,代码可能象如下的写法那样:

 '.aspx 页面中的其他HTML内容......
 <asp:datagrid id="dgCategoryFAQs" runat="server" />
 
 Private Sub Page_Load(sender as Object, e as EventArgs)
   '创建Proxy类的实例
   Dim consumeWebService as com._4guysfromrolla.aspnet.ASPFAQs
   Set consumeWebService = New com._4guysfromrolla.aspnet.ASPFAQs
  
   '把GetFAQsInCategory结果绑定到dgCategoryFAQs
   dgCategoryFAQs.DataSource = consumeWebService.GetFAQsInCategory(22)
   dgCategoryFAQs.DataBind()
 End Sub
检查一下上面的代码,你可能不明白对com._4guysfromrolla.aspnet.ASPFAQs Proxy类的调用实际上就是远程Web服务的调用,当调用Proxy类的GetFAQsInCategory方法时,会进行复杂的数据通讯(HTTP的请求/响应)。

结论

在本文里,我们讲述了如何创建Web服务,并如何在ASP.NET页面里使用它。微软公司实际上在.NET里已经简化了创建和使用Web服务的过程。创建一个Web服务简单到只需创建.asmx文件,然后为Web服务的方法写一点代码,并添加宏,那些代码看上去就和本地组件代码一样。使用Web服务也是很简单,这还要归功于Proxy类的使用。如前所述,利用诸如Visual Studio .NET那样的工具来创建一个Proxy类也是非常简单的。
 

  本文评论(Comments):为了保护您的电子邮件不被骚扰,地址中的个别符号转换成了全角字符!
  评论人:有点基础 电子邮件: 评论日期:2005年06月20日 03:19:48
  我看得明白呀...看来我还是有点基础的,不会看得云里,雾里.  ^,^(偷笑)
 
  评论人:Renyu 电子邮件:Renyu732@tom.com 评论日期:2005年05月22日 05:15:03
  谢谢孟子大哥的好文章...
 
  评论人:菜鸟求救 电子邮件:kelong23@sina.com 评论日期:2005年05月03日 01:01:08
  帮帮我,我想学ASP.net ,配置了SDK ,装好了IIS,和NETFrameworkSDK1.1.怎么打开.aspx文件会报错啊!
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

分析器错误
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

分析器错误信息: 未能加载类型“BK_GB.WebForm2”。

源错误:


行 1:  <%@ Page Language="vb" AutoEventWireup="false" Codebehind="UserReg.aspx.vb" Inherits="BK_GB.WebForm2"%>
行 2:  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
行 3:  <HTML>
 

源文件: c:\inetpub\wwwroot\lyb\UserReg.aspx    行: 1

 
 
  评论人: 电子邮件: 评论日期:2005年05月03日 12:56:21
  “/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

分析器错误
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

分析器错误信息: 未能加载类型“BK_GB.WebForm2”。

源错误:


行 1:  <%@ Page Language="vb" AutoEventWireup="false" Codebehind="UserReg.aspx.vb" Inherits="BK_GB.WebForm2"%>
行 2:  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
行 3:  <HTML>
 

源文件: c:\inetpub\wwwroot\lyb\UserReg.aspx    行: 1
 

 

 

 

 

 

 

 

使用google的web服务实现搜索

作者:Scott Mitchell

介绍

你知道google提供了一个web服务让你可以使用他的数据库去搜索吗?让你使用他
的数据库去找回已经被收藏的web页面吗?让你使用他的数据库去执行拼写检查吗?使
用google的web服务你可以在你自己的站点轻松的实现像google那样的搜索。下个月我
将写两到三篇的文章去说明如何利用google的web服务,这里我们先来看看如何利用
google的数据库去实现搜索的功能吧!


来自google的许可证
google的web服务接口目前还处在测试阶段,仅供个人使用。为了
限制限制过度的使用这个接口,google需要那些想去使用他的人可以得到
一个唯一的许可(这个许可是免费的).这个许可是为了限制个人使用者每天
的使用量不要超过1000次。请务必要认真的去读这个许可证。


web服务的快速入门

Web服务是一个额外的接口,这个接口由某个网站提供,可以被其他的网站调用。
你可以把web服务想象成一个自我包含的组件,同时带有一种或多种的调用方法。他
可以驻扎在Inetnet的任何地方。通过他所提供的调用方法而被世界任何一个地方的客户
端所调用。例如,google的web服务就提供了三种方法:doGoogleSearch(),
doGetCachedPage(), 和 doSpellingSuggestion().*The doGoogleSearch()这个方法
将返回和你输入的查询字符相符合的结果。然后这个方法返回一个GoogleSearchResult类的实例,这个实例中包含了搜索的结果。

Web服务是建立在开放的协议和标准上的。例如一个想要消费web服务的客户和
Web服务本身的通讯就是通过HTTP这样一个众所周知的开放协议来进行的。而参数和
返回值之间来来回回的传送也是通过SOAP这样一个众所周知的数据引导和排序协议来
进行的。这样一来,web服务就可以完全暴露了,打个比方来说:基于微软的IIS配置的
服务器上的由ASP.net所写的web页就可以被基于Apache培植的服务器上的PHP程序所
消费,甚至可以作为完全的桌面应用程序来使用。

当消费一个web服务的时候,通常都是先建立一个代理,这个代理将保护客户端免
于对web服务的复杂的请求。代理类是一个类,他本身包含了web服务的所有暴露出来
的方法和对象。当一个客户端程序发出请求时,这些方法将控制和引导这些参数进入
SOAP,然后通过HTTP协议传送这些SOAP请求,接着接受来自web服务的响应,再次
的引导和控制这些返回值。代理类允许客户端程序调用web服务就像是在调用自己本地
的组件一样。

如果你不是很熟悉web服务,那么这个入门指导将是一个很好的引导,但是你还是
要抽出一定的时间去读一读建立web服务和建立并消费web服务这两篇文章。

Google web服务的API

Google Web服务的信息你可以在http://www.google.com/apis/找到。在开始使用
Google的web服务之前,你需要先去下载 Google Web API Developer's Kit.这个666K
的文件包含了完整的WSDL文件用以描述这个web服务,还包含一些使用Java,VB.net
和C#开发的例子。下载完了Google的web服务开发工具包以后,你还需要在Google
申请一个帐号。这个帐号可以在
https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey这个地址去做。
一旦这个免费帐号被建立,那么你就会被分配给一个唯一的许可号。以后每当Google
web服务被调用的时候,这个帐号都必须 被使用,这个帐号的作用就是限制一个号每天
调用web服务的次数不可以超过1000次。

建立代理类

一旦你拥有了帐号和google接口开发工具包,那么接下来你就需要去建立用来调用
web服务的代理类了。在完成这些以前,我们需要先在WSDL文件中得到帮助,这是
一个XML格式的文件用来去描述google的web服务所提供的服务种类。这个WSDL
文件GoogleSearch.wsdl可以在google接口开发工具包中找到。

如果你使用Visual Studio.NET,那么你可以拷贝这个文件到存放ASP.NET文件的
文件夹中(如:C:\Inetpub\wwwroot\WebApplication1). 然后去项目菜单,选择
Add Web Reference选项。接下来在对话栏里输入WSDL文件的URL即可。就像这样
http://localhost/WebApplication1/GoogleSearch.wsdl。之后再点击
Add Reference按钮就可以完成这整个的过程了。这将建立一个代理类用localhost名字
空间(如果你喜欢,你可以自己改一个名字)。

如果你没有Visual Studio.net那么你可以建立代理类通过一个命令行程序去调用
wsdl.exe。wsdl.exe文件将建立一个C#或者是VB.NET文件,当然你要编译和运行
wsdl.exe文件。在命令行中直接输入如下的即可。

wsdl /protocol:SOAP /namespace:google /out:GoogleProxy.cs
C:\google\GoogleSearch.wsdl

这样将使用google名字空间去建立一个名字为GoogleProxy.cs的C#文件。使用C#
命令行编译器,csc,去编译这个类,如下:

csc /t:library /out:GoogleProxy.dll GoogleProxy.cs

这将建立一个名字叫GoogleProxy.dll的文件。一定要把这个文件拷贝到你的web应用
程序的 /bin 目录下。

关于wsdl.exe的更多的信息
如果没有Visual Studio.NET,那么要建立一个代理类需要更多的
信息,一定要读一下PowerPoint的介绍:从一个ASP.NET 的web页面
去调用web服务。

建立一个ASP.NET的web页面去调用google的web服务

既然已经建立了代理类,那么建立一个ASP.NET去调用web服务就是小事一桩了。
首先在做这件事情之前。我们需要先检查一下web服务需要那些参数。幸运的是,这些
参数都被详细的列在了Google站点的参考部分。在这里我们既然是经由google的
web服务去执行一个搜索,那么就让我们来检查一下doGoogleSearch()方法的参数。

这一方法的十个参数如下:

key:
由google提供的,必须要使用这个键值去访问google的服务,google使用这个键值起到鉴定和*记入日志的作用
q:
(看Query Terms 去查询详细的查询语法)
start:
第一个结果的首指针
maxResults :
每一个想得到的查询结果的数字。每个查询的最大值是10(注:如果你的查询没有多少匹配的话,那么得到的结果可能要少于你的提问)
filter:
激活和未激活的自动过滤,这将隐藏非常相似的结果,而这些结果都来自相同的主机。过滤器的只要作用是想去提高google的最终用户使用google时的体验,但是从你的站点应用考虑,你最好还是放弃使用它(参见Automatic Filtering的详细信息)。
restricts:
限制搜索web站点的网页索引下的子集,比如一个国家像“乌克兰”,或者是一个主题像“linux”。(参见Restricts 的详细信息)
safeSearch :
一个布尔值,在搜索结果中可以过滤掉成人内容。(参见SafeSearch的详细信息)
lr:
语言限制-限制搜索文档中含有一种或多种语言
ie:
输入代码用的,这个参数不常用,所有输入代码都应该使用UTF-8格式(参见input和output代码的详细信息)
oe:
输出代码用的,这个参数不常用,所有输出代码都应该使用UTF-8格式(参见input和output代码的详细信息)

DoGoogleSearch()方法将返回一个GoogleSearchResult对象的实例。这个对象有
一个resultElements属性,他们是一系列ResultElement对象的实例。每一个
ResultElement对象都有一个*数字属性。比如 title,snippet, URL,summary等等。

现在让我们去建立一个简单的ASP.NET web页去显示输入查询字-asp时的前十个
结果。这个使用如下的代码就可以完成。

<Script Language=”VB” Runat=”Server”>
Sub Page_Load(sender As Object, e As EventArgs)
Dim search As google.GoogleSearchService=New google.GoogleSearchService()
Dim result As google.GoogleSearchResult

result=search.doGoogleSearch(“license key...”, “ASP”, _
0, 10, True, “”, True, “”, “”, “”)

dlResults.DataSource = result.resultElements
dlResults.DataBInd()
End Sub
</Script>

<asp:DataList Runat=”Server” id=”dlResults”
Font-Name=”Verdana” Font-Size=”10pt”>
<ItemTemplate>
<span style=”font-size:15pt;font-weight:bold;”>
<%# Container.DataItem.title %>
</span><br />
<%# Container.DataItem.summary %><br />
[<a href=”<%# Container.DataItem.URL %>”>
<%# Container.DataItem.URL %>
</a>]
</ItemTemplate>

<SeparatorTemplate>
<p> </p>
</SeparatorTemplate>
</asp:DataLIst>

[查看演示实例]

以上代码的黑体部分是调用google web服务dogooglesearch()方法所必须的。
代码如此的少是由于代理类。搜索结果用DataList来显示,每个结果都将显示标题,
概要和通往这个页面的URL。

上面的演示实例将图示google的web服务如何去执行一个搜索。但是功能确是
非常有限的,因为它仅仅显示预先定义的搜索查询的前十个结果。在接下来的Part2
部分我们将看看如何使用一个ASP.NET去建立一个更加实用的web页去使用google的
web服务。

读Part2

使用google的web服务实现搜索(2)
上一个实例演示图示了如何调用google的web服务去实现一个搜索。但是它的功能
确实是非常有限的,它仅仅可以显示限定的查询字的前十个搜索结果。在第二部分,我们
将看看如何建立一个功能类似google的搜索引擎,可以建立一个页面让用户输入关键字
,再由另一个页面返回搜索结果。

建立一个功能更加强大搜索引擎

为了建立一个通过google提供的搜索接口web服务的功能更加强大的搜索引擎,先
让我们通过ASP.NET来建立一个可以分页并且可以让用户自己输入搜索条件的web页。
完成这个的一种方法就是模仿google自己的方法,这样也就意味着将搜索条件和搜索
的页数同时放在querystring环境变量里。比方说,如果用户想要查询字”ASP”而且希望前
十到二十个记录是可见的,那么这个URL请求将是:

http://www.yourserver.com/Search.aspx?q=ASP&first=10&last=20

其实还有其他的方法可以实现这个功能的。另一个方法就是使用postback方式。
Postback方式传送自己到ASP.NET中,所以它比querystring方式可以传送更多的
东西。然而querystring有一个好处那就是用户可以使用特别的查询(对于postback方式,
它是经由HTTP报头去传送数据的,但是querystring在搜索或者标页的时候是不可以
改变的)。

尽管querystring方式有这种标记的优点,但是我还是决定 去实现这个实例演示用
postback方式。如果你喜欢,你完全可以使用querystring方式。Postback方式的原代码
如下:

<script language="VB" runat="server">
Const PAGE_SIZE as Integer = 5

Sub execSearch(sender as Object, e as EventArgs)
ViewState("startIndex") = 0

DisplaySearchResults()
End Sub


Sub nextRecs(sender as Object, e as EventArgs)
ViewState("startIndex") += PAGE_SIZE

DisplaySearchResults()
End Sub


Sub prevRecs(sender as Object, e as EventArgs)
ViewState("startIndex") -= PAGE_SIZE

DisplaySearchResults()
End Sub


Sub DisplaySearchResults()
searchResults.Visible = True

Dim search As google.GoogleSearchService = New google.GoogleSearchService()
Dim result as google.GoogleSearchResult

result = search.doGoogleSearch("license key...", searchTerms.Text, _
ViewState("startIndex"), PAGE_SIZE, True, "", True, "", "", "")

dlResults.DataSource = result.resultElements
dlResults.DataBind()

lblSearchResults.Text = "Viewing records " & String.Format("{0:#,###}", _
ViewState("startIndex")+1) & " - " & _
String.Format("{0:#,###}", ViewState("startIndex") + _
PAGE_SIZE) & " of about " & _
String.Format("{0:#,###}", result.estimatedTotalResultsCount) & _
". Search took " & _
String.Format("{0:0.000}", result.searchTime) & " sec."

btnPrev.Enabled = (ViewState("startIndex") > 0)
End Sub
</script>

<form runat="server">
Enter your search term: <asp:TextBox runat="server" id="searchTerms" />
<asp:Button runat="server" Text="Search" OnClick="execSearch" />
<p>
<asp:panel id="searchResults" runat="server" Visible="False">
<table width="100%" bgcolor="#eeeeee">
<tr><td align="right">
<asp:Label id="lblSearchResults" runat="server" />
</td></tr>
</table>

<asp:DataList runat="server" id="dlResults"
Font-Name="Verdana" Font-Size="10pt">

<ItemTemplate>
<span style="font-size:15pt;font-weight:bold;">
<%# Container.DataItem.title %>
</span><br />
<%# Container.DataItem.snippet %><br />
[<a href="<%# Container.DataItem.URL %>"><%# Container.DataItem.URL %></a>]
</ItemTemplate>

<SeparatorTemplate>
<p> </p>
</SeparatorTemplate>

</asp:DataList>

<table width="100%" bgcolor="#eeeeee">
<tr><td align="right">
<asp:LinkButton id="btnPrev" runat="server" Text="< Prev." OnClick="prevRecs" /> |
<asp:LinkButton id="btnNext" runat="server" Text="Next. >" OnClick="nextRecs" />
</td></tr>
</table>
</asp:Panel>
</form>

[参看实例演示]

以上代码的主要功能子程序是DisplaySearchResults(),它将调用web服务,把结果
绑定到DataList中去,并且它还将显示各色各样的信息,比如估计匹配数,查询要求
运行的时间等等。这个子程序还将决定以前的LinkButton是激活还是不激活。

还有一点要注意的就是,当调用google搜索的web服务时,我们必须规定起始的
索引和在一页中将看见多少结果。那就是说,为了看见一个搜索的前十个记录,我们
应当设定0作为开始标记,而将10作为返回的记录数。为了看见接下来的十个记录,
我们最好将10作为开始标记(让10作为返回的记录数)。需要注意的就是,ViewState
被用来去维持开始页的标记数。每一页要显示的记录数被常数PAGE_SIZE所表示。

考虑到分页,将有两个LinkButton被使用,当点击它们的时候,nextRecs和
prevRecs事件将被触发。这些事件仅仅更新可以看见的开始记录数并且调用
DisplaySearchResults().


结论

在这篇文章中我们探究了如何去调用google搜索的web服务。为了调用这个web
服务,我们首先下载了downloading the Google Web API Developer's Kit,接下来我们
在google站里建立了一个帐号可以得到一个许可证。这些都做完以后,我们建立了一个
基于google web服务WSDL文件(GoogleSearch.wsdl, 被包含在被下载的Developer's Kit
里)的代理类。建立了代理类以后,我们仅仅就需要几行简单的ASP.NET代码就可以去调用这个
web服务了。

编程快乐!!!:)

Scott Mitchell

 

 

 

 

 

 

 

 

 

posted on 2005-08-14 18:25  icehyp  阅读(1679)  评论(1)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3