230 likes | 406 Views
ASP.net 企业级应用开发. 信息工程系:罗明刚. 第十四章 使用 Web 服务. 回顾 2-1. Web 服务是一种自包含、自解释、模块化的应用程序,它能够在 Web 上发布、定位和调用 Web 服务结构主要由以下层组成: 数据存储 数据访问 Web 服务逻辑 Web 服务外观 侦听器层 [WebMethod] 标签通知 ASP.NET 编译器, 接下来的方法是一个 Web 方法,它将导出到 Web. 回顾 2-2. 服务提供者与服务注册器、服务代理和服务请求者一起组成了 Web 服务中的重要参与者
E N D
ASP.net 企业级应用开发 信息工程系:罗明刚
回顾 2-1 • Web 服务是一种自包含、自解释、模块化的应用程序,它能够在 Web 上发布、定位和调用 • Web 服务结构主要由以下层组成: • 数据存储 • 数据访问 • Web 服务逻辑 • Web 服务外观 • 侦听器层 • [WebMethod] 标签通知 ASP.NET 编译器,接下来的方法是一个Web 方法,它将导出到 Web
回顾 2-2 • 服务提供者与服务注册器、服务代理和服务请求者一起组成了 Web 服务中的重要参与者 • Web 服务的优点如下: • 交叉业务集成 • 提高效率 • 拉近客户关系 • 便于及时集成 • 创建 Web 服务项目时,VS.NET 会生成以下文件 • AssemblyInfo.cs • <WebService> .asmx 和 <WebService> .cs • Global.asax 和 Global.asax.cs • <WebService> .disco • Web.config
目标 • 理解部署WebService • 了解注册和发布 • 掌握在ASP.NET和WinForm中使用WebService
Web 服务用户 采用Disco 采用WSDL 代理 使用Web服务过程 UDDI (1) (2) Web 服务 Disco Disco Disco WSDL
注册和使用 Web 服务 • 要解决这些问题,此规范分为三个类别: • 发现 • 说明 • 协议 • Web 服务存在的共同问题: • 紧密耦合 • 发布服务 • 描述服务 • 网络 • 开发框架和工具 UDDI DISCO 服务 WSDL SOAP
UDDI 2-1 因此UDDI 可用于查找以下内容 : • 有关业务伙伴提供的 Web 服务的信息 • 特定Web 服务的提供者列表 • 特定 Web 服务如何公开的详细技术信息 • 特定业务类别下,提供特定 Web 服务的公司等 UDDI 帮助注册服务提供者提供的服务,以便可以共享。 还有助于服务使用者或 Web 用户查找 Web 服务
UDDI 2-2 UDDI 业务注册表的目的是整合电子商务站点 工业 Internet UDDI 市场与 搜索引擎 业务注册 表(UBR) UDDI 商业 商业实体设置的业务注册规范和UDDI 架构组合在一起, 方便了要编程的 Web 服务的发现 注册/搜索 UDDI 业务注册表
UDDI的工作原理 Business Entity 注册过程中提供的信息可以大致分为三类: Business Service Publisher Assertion 白页 数据 包括地址、联系方式和已知标识符 包括基于标准分类法划分的行业类别信息 黄页 Binding Templates tModel 包含有关公司提供的服务的技术信息和 对各种其他规范的引用 绿页 这些页面中的数据可以划分为五类:
UDDI 业务注册表 Microsoft 节点运营商 每日复制 节点 IBM 直接注册 注册处 通过注册处 进行注册
用 UDDI 查找 Web 服务 • 发现Web 服务所需要的第一个步骤。可以通过在页面 http://www.uddi.org上单击链接“Find”来打开此页面 • 接下来在提供的列表中选择 UDDI 业务注册表 • 要查看列出的各种服务,则必须单击服务链接 • 单击其中一个服务,就会生成有关服务/业务/服务类型的说明,如图所示 UDDI 业务注册表 服务详细信息 搜索结果
用发现文档查找 Web 服务 2-1 • Web 服务发现机制使客户端应用程序能够查找或发现描述 Web 服务的文档 • .disco 文件或发现文档包含到描述 Web 服务的其他资源的链接,并使客户端发现 Web 服务 • 以下代码演示了发现文档的内容 <? Xml version=”1.0” encoding = “tuf-8”?> <discovery xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns= “http://schemas.xmlsoap.org/disco/”> <discoveryRef ref= “/Folder/Default.disco”/> <contractRef ref =”http://Nancyd/mywebservice/Service1.asmx?wsdl” docRef=http://Nancyd/mywebservice/Service1.asmx xmlns=http://schemas.xmlsoap.org/disco/scl/ /> <soap address=”http://Nancyd/mywebservice/Service1.asmx” xmlns:q1=http://tempuri.org/ binding=q1:Service1Soap” xmlns=http://schemas.xmlsoap.org/disco/scl/ /> </discovery> 在发现文档中指定服务说明引用
用发现文档查找 Web 服务 2-2 • 创建一个 XML 文档,并在第一行中插入 <?xml version=”1.0”?> 标签 • 添加一个< discovery> 元素,如: <discovery xmlns=http://schemas.xmlsoap.org/disco/> • 如所示,在<discovery> 元素中添加对服务说明、XSD 架构和其他发现文档的引用,: • 在 Web 服务器上部署发现文档 <?Xml version=”1.0”?> <discovery xmlns=http://schemas.xmlsoap.org/disco/> <discoveryRef ref=/Folder/Default.disco”/> <contractRef ref=”http:/NancyD/MyWebService.asmx?WSDL” docRef =”Service.htm” xmlns=http://schemas.xmlsoap.org/disco/scl/”/> <schemaRef ref=”Schemas.xmlsoap.org/disco/schema/”/> </discovery>
使用 Wsdl.Exe创建代理类 • 要为创建的 Web 服务创建代理文件,请在 DOS 提示符入键入以下命令: • WSDL.exe 实用程序用 /l:language 命令行参数指定语言 • 代理源文件需要被编译为一个 DLL WSDL http://localhost/aspex/CH13/Factorial.asmx WSDL http://localhost/aspex/CH13/Factorial.asmx/l:vb csc /out:MyWS.dll /t:library /r:System.Web.Services.dll Factorial.cs
在 ASP.NET 中使用 Web 服务 3-1 • 创建一个名为 CH14-Web 的 Web 应用程序 • 在“解决方案资源管理器”窗口中右键单击“引用”节点并选择“添加 Web 引用”,如图 所示 • 此时出现“添加 Web 引用”对话框,如图所示 • 在“添加 Web 引用”对话框的 URL 栏中,指定要使用的 XML Web 服务的路径 • 单击方法 CalFactorial(),便显示 VS.NET 自动生成的页面,以测试 Web 服务公开的方法
在 ASP.NET 中使用 Web 服务 3-2 • 为该方法输入相应的参数,并单击“调用”。测试的结果显示在“Internet Explorer”窗口中,如图所示 • 通过替换“Web 引用名称”栏中的默认名称 localhost,将 Web 服务名称重命名为 MyWebService,如图所示。最后单击“添加引用”按钮,添加对 Web 应用程序的引用 • 单击“添加引用”按钮后,Visual Studio .NET 在“解决方案资源管理器”窗口中包括Web 引用MyWebService,并将相应的.wsdl、.disco 和 .map 文件添加到“Web 引用”文件夹下的客户端应用程序
在 ASP.NET 中使用 Web 服务 3-3 • 设计如图所示的 Web 应用程序界面,并将 Web 窗体重命名为 TestFactorial.aspx • 对 Web 界面中控件的命名,如表所示 • 将以下代码添加至 CalculateFactorial 的 Click 事件 • 构建并执行此应用程序,以验证其工作情况 private void btnCal_Click(object sender, System.EventArgs e) { MyWebService.Factorial objMyWebService = new CH14 Web.MyWebService.Factorial); lblVal.Text =objMyWebService.CalFactorial(Int32.Parse (txtVal.Text)) .ToString(); } TestFactorial.aspx TestFactorial.aspx中的控件
在 WinForms 中使用 Web 服务 2-1 • 在 VS.NET 中创建一个名为 CH14Win 的 Windows 应用程序。将该窗体重命名为 frmTestWebService,窗体标题为“测试 Web 服务” • 在“解决方案资源管理器”窗口中右键单击“引用”节点,并选择“添加 Web 引用” • 输入 Web 服务Factorial.asmx 的路径,并将 Web 引用的名称替换为 WebService2。接下来单击“添加引用”按钮将 Web 服务添加到该项目中 • 设计如图所示的 Windows 应用程序界面,对窗体控件的命名,如表所示 frmTestWebService
在 Winforms中使用 Web 服务 2-2 • 将以下代码添加到 btnCal 的 Click 事件 • 构建并执行此应用程序,以验证其工作情况 private void btnCal_Click(object sender, System.EventArgs e) { MyWebService2.Factorial objMyWebService2 = new MyWebService2.Factorial); lblVal.Text = objMyWebService2.CalFactorial(Int32.Parse (txtVal.Text)).ToString(); }
总结 • UDDI 帮助注册服务提供者提供的服务,以便可以共享 • UDDI 业务注册表的目的是整合电子商务站点 • Web 服务发现机制使客户端应用程序能够查找或发现描述 Web 服务的文档 • 发现文档包含有关其他 Web 服务的信息,此 Web 服务位于同一或另外的 Web 服务器上 • WSDL(Web 服务描述语言)是 Microsoft、Ariba 和 IBM 共同努力的结果,是一种描述或描绘 Web 服务的语言 • VS.NET 2003 提供了在Windows 和Web 应用程序中使用Web 服务的简单方法