第 7 章 web 服务
DESCRIPTION
第 7 章 Web 服务. Web 服务 (Web Service) 是一项新兴发展的技术。它以“软件就是服务”为理想目标,使得在系统架构以及软件开发等领域都发生了深刻的变化。 Web 服务是微软 .NET 策略计划的基础。一个 Web Service 就是一个应用 Web 协议的可编程的应用程序逻辑。实际上, Web 服务就是一个动态链接库 DLL ,它向外界显示出的是一个能够通过 Web 进行调用的 API 。 本章重点: ● Web 服务概要,了解 Web 服务、 SOAP 、 DDI 、 WSDL 的概念 ● 掌握创建 Web 服务 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/1.jpg)
第第 77 章 章 WebWeb 服务服务 Web 服务 (Web Service) 是一项新兴发展的技术。它以“软件就是服务”为理想目标,使得在系统架构以及软件开发等领域都发生了深刻的变化。 Web 服务是微软 .NE
T 策略计划的基础。一个 Web Service 就是一个应用 Web协议的可编程的应用程序逻辑。实际上, Web 服务就是一个动态链接库 DLL ,它向外界显示出的是一个能够通过 Web 进行调用的 API 。 本章重点:
● Web 服务概要,了解 Web 服务、 SOAP 、 DDI 、WSDL 的概念 ● 掌握创建 Web 服务 ● 熟练应用 Web 服务的几种调用方法 ● 学会使用 Web 服务来提供数据服务
![Page 2: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/2.jpg)
7.1 Web7.1 Web 服务概要服务概要一个 Web Service 就是一个应用 Web 协议的可编程的应用程序逻辑。实际上,Web 服务就是一个动态链接库 DLL ,它向外界显示出的是一个能够通过 Web 进行调用的 API 。用户不需要知道它的内部实现,而只需要知道他的调用函数名和参数即可。但与普通的 DLL 不同的是,它不存在于本地主机上,而是存在服务器端的,因此W eb 服务可以被任何能访问本机的网络用户调用,这就是W eb 服务的主要概念。
![Page 3: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/3.jpg)
7.1.1 XML 、 SOAP 与 Web Service
XML 实际上是 Web 上表示结构化信息的一种标准文本格式,它没有复杂的语法和包罗万象的数据定义。 XML 提供了一种结构化的数据表示方式,使得用户界面分离于结构化数据。 XML 允许使用者创建和使用他们自己的标记而不是 HTML 的有限词汇表。这一点至关重要,企业可以用XML 为电子商务和供应链集成等应用定义自己的标记语言,甚至特定行业一起来定义该领域的特殊标记语言,作为该领域信息共享与数据交换的基础。
![Page 4: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/4.jpg)
SOAP ( Simple Object Access Protocol )是一个基于 XML 的协议,包括四个部分: SOAP 封装,封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架; SOAP 编码规则用于表示应用程序需要使用的数据类型的实例 ;SOAP RPC 表示 , 表示远程过程调用和应答的协定 ; SOAP 绑定,使用底层协议交换信息。
![Page 5: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/5.jpg)
7.1.2 Web 服务的体系结构 IBM
查找发布
绑定
服务提供者 服务请求者
UDDI注册中心
![Page 6: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/6.jpg)
UDDI UDDI UDDI 是一个 Web Services 的信息注册规范,定义了 Web 服务的注册发布和发现的方法。 UDDI 类似一个目录索引,上面列出了所有可用的企业的 Web 服务信息,服务服务器请求者可以在这个目录中找到自己的需要的服务。 企业首先向 UDDI 注册中心注册Web 服务并提供这些 Web 服务的描述。服务请求者可以使用 UDDI 注册中心来发现所需要使用的 Web 服务,然后就可以调用这些服务。
![Page 7: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/7.jpg)
WSDLWSDL Web service 描述语言 (WSDL) 是这样一个基于 XML 的语言,用于描述 Web servi
ce 及其函数、参数和返回值。因为是基于XML 的,所以 WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service 生成 WSDL 文档,又能导入WSDL文档,生成调用相应 Web service 的代码。
![Page 8: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/8.jpg)
7.2 7.2 创建创建 WebWeb 服务服务 在理解 Web 服务构架和基本访问流程后,通过 VS.NET2003 创建 Web 服务就是一件简单的事情了。在 VS.NET 集成开发环境 (IDE) 的新建项目对话框中,选择“ ASP.NET Web 服务”项目 .
图 7.2 创建 Web 服务对话框
![Page 9: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/9.jpg)
图 7.3 Web 服务设计界面
![Page 10: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/10.jpg)
代码清单代码清单 7-17-1 部分代码部分代码 ……7 : using System.Web.Services; 8 : namespace chapter79 : {10 : public class Service1 : System.Web.Services.WebService11 : {12 : public Service1()13 : {14 : //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的15 : InitializeComponent();16 : }17 : #region 组件设计器生成的代码18 : //Web 服务设计器所必需的19 : private IContainer components = null;20 : /// <summary>21 : /// 设计器支持所需的方法 - 不要使用代码编辑器修改22 : /// 此方法的内容。23 : /// </summary>24 : private void InitializeComponent()25 : {26 : }
![Page 11: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/11.jpg)
27 : /// <summary>28 : /// 清理所有正在使用的资源。29 : /// </summary>30 : protected override void Dispose( bool disposing )31 : {32 : if(disposing && components != null)33 : {34 : components.Dispose();35 : }36 : base.Dispose(disposing);37 : }38 : #endregion39 : // WEB 服务示例40 : // HelloWorld() 示例服务返回字符串 Hello World41 : // 若要生成,请取消注释下列行,然后保存并生成项目42 : // 若要测试此 Web 服务,请按 F5 键43 : //[WebMethod]44 : //public string HelloWorld()45 : //{46 : // return "Hello World";47 : //}48 : }
49 : }
![Page 12: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/12.jpg)
去掉红色注释部分,使服务有效,运行该去掉红色注释部分,使服务有效,运行该 WebWeb 服务页面服务页面
图 7.4 Web 服务运行界面
![Page 13: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/13.jpg)
图 7.5 测试 HelloWorld 方法 图 7.6 运行服务的结果
![Page 14: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/14.jpg)
在 VS.NET 开发项目中,应用最多的可能莫过于访问数据库,开发企业级应用软件时需要大量与数据库进行交互。特别是在集团化的分布式管理应用中,采用先进的 Web Services ( Web 服务)分布式技术,构建覆盖集团所属企业单位的信息体系,实现集团总部、直属企事业单位、下属全资、控股子公司之间的信息的实时传输和集中管理。程序清单 7-2 是利用 Web服务访问数据库,检索所有学生的成绩,返回数据集。
![Page 15: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/15.jpg)
程序清单程序清单 7-27-21 : [WebMethod]2 : public DataSet get_grade()3 : {4 : string connstr="provider=microsoft.jet.oledb.4.0;data source="+5 : Server.MapPath("student.mdb");6 : OleDbConnection conn=new OleDbConnection(connstr);7 : OleDbDataAdapter da=new OleDbDataAdapter ("select * from grade",conn);8 : DataSet ds=new DataSet();9 : try10 : {11 : da.Fill(ds);12 : }13 : finally14 : {15 : da.Dispose();16 : }17 : return ds;18 : }
![Page 16: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/16.jpg)
图 7.7 以数据集返回的学生成绩数据
![Page 17: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/17.jpg)
7.3 7.3 使用使用 WebWeb 服务服务 Web 服务的主要作用就是为了供客户端程序调用,由于 Web 服务是在遵循 SOA
P 协议的基础上采用 WSDL(Web 服务描述语言 ) 语言描述的,因此可以采用以下方式来使用 Web 服务。 1) 通过 Web引用方式使用 Web 服务2) 通过代理类来使用 Web 服务3) 使用 Microsoft SOAP工具包使用 Web服务
![Page 18: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/18.jpg)
7.3.1 通过 Web引用方式使用 Web 服务1.添加Web引用
![Page 19: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/19.jpg)
图 7.9 添加 Web 服务的对话框
选择本地的 Web服务
![Page 20: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/20.jpg)
图 7.10 显示本地计算机上的所有 Web 服务
![Page 21: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/21.jpg)
2. 通过服务类的实例调用方法 在 test.aspx 页面的 Page_Load 事件中,编写如下代码,调用该 Web 服务的 get_gr
ade() 方法,获取成绩表中的成绩信息,并把它放到 DataGrid1 中显示出来。 1 : private void Page_Load(object sender, System.EventArgs e)2 : {3 : get_stud_grade gsg=new get_stud_grade();4 : this.DataGrid1.DataSource=gsg.get_gra
de() . Tables[0].DefaultView;5 : this.DataGrid1.DataBind();6 : }
![Page 22: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/22.jpg)
图 7.11 调用 Web 服务返回的数据
![Page 23: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/23.jpg)
7.3.2 通过代理类使用 Web 服务 创建 Web 服务代理类可以使用 .NET命令行工具 wsdl.exe 来完成。该工具的使用格式如下: wsdl [options] {URL | path} ,其中 URL 是指向 WSDL 协定文件 (.wsdl) 、
XSD 架构文件 (.xsd)或发现文档 (.disco) 的 URL 。 Path 是本地 WSDL 协定文件 (.wsdl) 、 XSD 架构文件 (.xsd) 或发现文档( .disco或 .discomap )的路径。
![Page 24: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/24.jpg)
步骤步骤 1 1 生成代理类生成代理类 要针对前面编写的 7-2 服务生成代理类,首先通过“ Visual Studio .NET 2003 命令提示”进入 DOS 提示符操作界面,在提示符下键入以下命令: wsdl /n:Get_Grad
eNS /out:get_grade.cs http://localhost/chapter7/7-2.asm
![Page 25: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/25.jpg)
生成的代理类生成的代理类 get_grade.csget_grade.cs清单清单1 : namespace Get_GradeNS {2 : using System.Diagnostics;3 : using System.Xml.Serialization;4 : using System;5 : using System.Web.Services.Protocols;6 : using System.ComponentModel;7 : using System.Web.Services;8 : 9 : /// <remarks/>10 : [System.Diagnostics.DebuggerStepThroughAttribute()]11 : [System.ComponentModel.DesignerCategoryAttribute("code")]12 : [System.Web.Services.WebServiceBindingAttribute(Name="get_stud_gradeSoa
p", Namespace="http://tempuri.org/")]
13 : public class get_stud_grade : System.Web.Services.Protocols.SoapHttpClientProtocol {
14 : 15 : /// <remarks/>16 : public get_stud_grade() {17 : this.Url = "http://localhost/chapter7/7-2.asmx";
![Page 26: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/26.jpg)
18 : }19 : 20 : /// <remarks/>21 :22 : [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.
org/get_grade", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.
Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
23 : public System.Data.DataSet get_grade() {24 : object[] results = this.Invoke("get_grade", new object[0]);25 : return ((System.Data.DataSet)(results[0]));26 : }27 : 28 : /// <remarks/>29 : public System.IAsyncResult Beginget_grade(System.AsyncCallback callback,
object asyncState) {return this.BeginInvoke("get_grade", new object[0], callback,
asyncState);30 : } 31 :
![Page 27: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/27.jpg)
32 : /// <remarks/>33 : public System.Data.DataSet Endget_grade(System.IAsyncResult asyncResul
t) {34 : object[] results = this.EndInvoke(asyncResult);35 : return ((System.Data.DataSet)(results[0]));36 : }37 : }38 : }
![Page 28: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/28.jpg)
步骤步骤 2 2 编译代理类生成程序集编译代理类生成程序集
图 7.13 编译代理文件为 DLL 组件
![Page 29: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/29.jpg)
步骤步骤 3 3 在项目中引用程序集在项目中引用程序集
图 7.14 通过本地代理访问远程 Web 服务
![Page 30: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/30.jpg)
7.4 7.4 使用使用 WebWeb 服务的数据服务服务的数据服务 作为一个 Web 服务,它是可能被任意类型的客户端程序访问的。因此有必要为
Web 服务提供一套统一的具有广泛意义的数据类型。为了做到这一点, .NET 框架中的 Web 服务使用了 XML Schema Definition 语言中定义的数据类型,因为这些数据类型可以被 XML 编码和序列化。
表 7-2 可在 Web 服务中传递的数据类型 类型 说明
基本类型 String,Char,Byte,Boolean,Int16,Int32,Int64,UInt32,Uint64,Single,Double, Guid,Decimal,DateTime,XML中 timeInstant,DateTime,date等
类和结构中的成员
是类和结构中具有 public属性的成员和属性
DataSet 数据集对象也是 Web传递的数据类型 XmlNode XmlNode对象可以作为类或结构体的 field成员
![Page 31: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/31.jpg)
7.4.1 使用 Web Service完成数据查询 在 .NET 应用中,经常需要查询数据库中数据,由于 DataTable 、 DataView 、
DataRow 等类型的对象都不能被序列化,把 DataTable 的值存放在数据集中,利用Web 服务返回,供用户调用。
![Page 32: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/32.jpg)
1.1. 创建服务创建服务程序清单 7-51 : [WebMethod]2 : public DataSet index_grade(string stud_id)3 : {4 : string connstr="provider=microsoft.jet.oledb.4.0; data source="+5 : Server.MapPath("student.mdb");6 : OleDbConnection conn=new OleDbConnection(connstr);7 : string sql="select * from grade where stud_id='"+stud_id
+"'";8 : OleDbDataAdapter da=new OleDbDataAdapter(sql,conn);9 : DataSet ds=new DataSet();10 : da.Fill(ds);11 : da.Dispose();12 : return ds;13 : }
![Page 33: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/33.jpg)
2.2. 引用服务引用服务1 : private void Button1_Click(object sender, System.EventArgs e)2 : {3 : string stud_id=this.stud_id.Text.Trim();4 : Service2 s2=new Service2();5: this.DataGrid1.DataSource= s2.index_grade(stud_id);6 : this.DataGrid1.DataBind();7 : } 运行界面
![Page 34: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/34.jpg)
7.4.2 使用 Web Service 向数据库添加数据 在很多情况下,不同的应用程序需要共享一个数据库,而这个数据库出于安全的考虑,并不想向其它应用程序或用户提供用户名和密码,此时Web 服务不失为一种好的方法。通过它开通数据库的查询或更新操作,完成特定的任务,然后返回结果。
![Page 35: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/35.jpg)
1.1. 创建服务创建服务1 : [WebMethod]2 : public bool add_grade(string stud_id,string course_id,int gra
de)3 : {4 : string connstr="provider=microsoft.jet.oledb.4.0; data source="+5 : Server.MapPath("student.mdb");6 : OleDbConnection conn= new OleDbConnection(connstr);7 : string sql="insert into grade values('"+stud_id+"','"+
course_id+"',"+grade.ToString()+")";8 : OleDbCommand comm= new OleDbCommand(sql,conn);
![Page 36: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/36.jpg)
9 : try10 : {11 : conn.Open();12 : comm.ExecuteNonQuery();13 : return true;14 : }15 : catch16 : {17 : return false;18 : }19 finally20 : {21 : conn.Close();22 }23 : }
![Page 37: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/37.jpg)
2.2. 引用服务引用服务1 : private void Button1_Click(object sender, System.EventArgs e)2 : {3 : string stud_id=this.stud_id.Text.Trim();4 : string course_id=this.course_id.Text.Trim();5 : int grade=Int16.Parse(this.grade.Text.Trim());6 : Service3 s3=new Service3();7 : if(s3.add_grade(stud_id,course_id,grade))8 : {9 : RegisterStartupScript("message","<script> alert('添加成功! ');</script>");10 : }11 : else12 : {13 : RegisterStartupScript("message","<script> alert('添加失败! ');</script>");14 : }15 : }
![Page 38: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/38.jpg)
图 7.16 使用 WebWeb Service 添加学生成绩
![Page 39: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/39.jpg)
7.4.3 使用 Web Service传送二进制文件 Web 服务也可以用来传送一个二进制文件,比如一个程序或一张图片。这种实现是通过读取二进制文件,并转化成 byte数组,然后作为 Web 服务的返回值进行传送。在 Web窗体中,调用该 Web 方法,利用 byte 数组生成一个图片文件,就可以达到接收二进制文件的目的。
![Page 40: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/40.jpg)
1.1. 创建创建 WebWeb 服务服务1 : [WebMethod]2 : public byte[] get_image(string image_path)3 : {4 : if(File.Exists(image_path))5 : {6 : try7 : {8 : FileStream fs= new FileStream(
image_path,FileMode.Open,FileAccess.Read);9 : int bytes;10 : byte[] image_byte;11 : MemoryStream ms=new MemoryStream();12 : while((bytes=fs.ReadByte())!=-1)13 : {14 : ms.WriteByte((byte)bytes);15 : }
![Page 41: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/41.jpg)
16 : fs.Close();17 : image_byte=ms.ToArray();18 : ms.Close();19 : return image_byte;20 }21 : catch22 : {23 : return null;24 : }25 : }26 : else27 : {28 : return null;29 : }30 : }
![Page 42: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/42.jpg)
2.2. 引用服务引用服务private void Page_Load(object sender, System.EventArgs e){
Service4 s4=new Service4();byte[] image_byte=s4.get_image(Server.MapPath("winnt.jpg"));if(image_byte!=null){
MemoryStream ms= new MemoryStream(image_byte,0,image_byte.Length);
Bitmap bitm=new Bitmap(ms);bitm.Save(Response.OutputStream,ImageFormat.Jpeg);
}}
图 7.17 接收 Web 服务传送的图片
![Page 43: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/43.jpg)
本章小结 本章重点介绍了 Web 服务的创建、使用,以及几种常用的调用 Web 服务方法。需要熟练掌握如何使用 Web 服务,包括如何通过引用 Web 服务和生成代理类来使用 Web服务。需要注意的是 Web 服务需要发布和部署在 Web 服务器上才好访问和调用。
![Page 44: 第 7 章 Web 服务](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56814aa2550346895db7b502/html5/thumbnails/44.jpg)
思考练习1.Web 服务方法与普通类的方法有何区别;2.WSDL 的作用是什么?3.创建一个 Web 服务,用于计算两个整数的乘积。如果用户输入的数据类型错误,返回错误消息。4.基于 student.mdb 学生数据库创建一个
Web 服务,检索某班学生的所有成绩。