CurrencyConverter 应用程序提供两项 Web 服务。我将向您展示我如何完成 USDollarService 的实现,至于如何实现补充的 EuroService 需要您自己去领会。正如您将看到的,这并不是什么高深的火箭科学。
首先,我右键单击 USDollarService.asmx 文件,然后选择 View Code。Visual Studio 生成的主干代码如下所示:
为了完成 Web 服务的实现,我将几行代码输入到 Web 方法体中。如果是 fromEuros 方法,则所需的代码为:Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
![]()
Namespace CurrencyConverterNamespace CurrencyConverter
![]()
<System.Web.Services.WebServiceBinding(Name:="USDollarService")> _
Public Class USDollarServiceClass USDollarService
Inherits System.Web.Services.WebService
![]()
'''
<System.Web.Services.WebMethod()> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="USDollarService")> _
Public Function fromEuros()Function fromEuros(ByVal amount As Double) As Double
![]()
End Function
![]()
'''
<System.Web.Services.WebMethod()> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="USDollarService")> _
Public Function fromPoundsSterling()Function fromPoundsSterling(ByVal amount As Double) As Double
![]()
End Function
End Class
![]()
End Namespace
这段代码的作用是设置 BureauDeChange 应用程序提供的 ExchangeRateService 的一个代理,调用该服务的 getExchangeRate 操作,再将提供的金额(单位为欧元)与汇率相乘,然后以美元为单位返回金额。Dim rate As Double
Dim exchangeService As New CurrencyConverter.WebServiceProxies.ExchangeRateService
rate = exchangeService.getExchangeRate("EUR", "USD")
Return amount * rate
注代理是一个本地对象,您可以将它作为远程 Web 服务本身(虽然它实际上不是)来调用。代理在内部发出适当的 SOAP 请求并对响应进行解包,而您无需了解它是如何工作的。实际上,代理从概念上填写了图 4 中的窗体并捕获如图 5 所示的响应。
一旦输入并保存了这段代码,我就能够测试由 CurrencyConverter 应用程序的 USDollarService 提供的 fromEuros 操作的实现,方式与我以前测试 BureauDeChange 应用程序的 ExchangeRateService 提供的 getExchangeRate 操作完全相同。只需在浏览器中查看 USDollarService.asmx 文件,选择 fromEuros 操作,然后填写一个类似于图 4 所示的 HTML 窗体,不过这次要求输入金额(单位为欧元)。
当我输入的金额为 100 欧元时,以美元为单位的响应如下所示:
DollarExchangeApp 实现<?xml version="1.0" encoding="utf-8" ?>
<double xmlns="http://tempuri.org/">128</double>
我现在要描述的 DollarExchangeApp 实现也可以用于演示 EuroExchangeApp 的实现,这几乎是完全相同的。在开始时,Visual Studio 将生成一个默认的 Web 页 — Default.aspx,其内容如下。
我使用 Web 窗体设计器构造应用程序的 UI,您可以提前看一看下面的图 6 以对此有一个感性认识。设计完窗体之后,下面的 HTML 代码会出现在上述清单的 <div> 和 </div> 标记之间:<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default_aspx" %>
![]()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
![]()
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
当您亲自实现这个应用程序时,只需将这段代码粘贴到 Default.aspx 文件而不用自己重新设计该窗体。<asp:Label ID="Label1" Runat="server" Text="Enter amount in Euros"
Width="142px" Height="19px"></asp:Label>
<asp:TextBox ID="euroAmount" Runat="server"></asp:TextBox>
<asp:Button ID="convertButton" Runat="server" Text="Convert to US Dollars"
OnClick="convertButton_Click" /> <br />
<asp:Label ID="Label2" Runat="server" Text="Amount in US Dollars is"
Width="158px" Height="19px"> </asp:Label>
<asp:TextBox ID="dollarAmount" Runat="server"></asp:TextBox>
除了 UI 代码之外,我还需要一个用于按钮的事件处理程序,因此我在窗体设计视图中双击此按钮,然后输入以下代码。
这段代码创建一个 USDollarService 的代理,并对它进行调用,调用方式与先前 USDollarService 调用 ExchangeRateService 所采用的方式相同。Protected Sub convertButton_Click()Sub convertButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dollarService As New DollarExchangeApp.WebServiceProxies.USDollarService
dollarAmount.Text = dollarService.fromEuros(Double.Parse(euroAmount.Text))
End Sub
从名为 euroAmount 的文本框中获得要从欧元转换为美元的金额,在带有 dollarAmount 标记的文本框中显示以美元为单位的结果金额。图 6 显示我测试该应用程序时发生的情况。
图 6. DollarExchangeApp
![](/sourcefiles/pic/2006-8-11/image/06811012.gif)
尝试一下!
现在,您可以按照上面的描述,尝试着完成 DollarExchangeApp 和补充的 EuroExchangeApp 的实现。如果您还未这样做,那么您首先需要完成其他 Web 服务应用程序的实现。