ImageVerifierCode 换一换
格式:DOCX , 页数:147 ,大小:1.38MB ,
资源ID:9872972      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9872972.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Wcf应用基础.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Wcf应用基础.docx

1、Wcf应用基础目 录第八章分布式系统(WCF)基础 28.1什么是WCF 28.2 Hello, World实例 38.2.1创建WCF服务端程序 38.2.2创建WCF客户端程序 68.2.3在客户端添加WCF引用 78.2.4调用WCF服务 88.2 实体类应用实例 108.2.1建立契约项目 108.2.2建立学生实体类 118.2.3建立实体服务契约 138.2.4建立WCF服务代理 148.2.5建立WCF服务项目 188.2.6添加服务契约层引用 198.2.7实现WCF服务契约(实现服务接口) 198.2.8测试WCF服务 218.2.9建立用户界面项目 228.2.10调用WC

2、F服务 238.3知识讲解 268.3.1 WCF是怎么运行的? 268.3.2 WCF绑定 278.3.3 契约 278.3.4 序列化 298.3.5 WCF宿主 328.3.6自我跟踪(Self-Tracking) 328.4学生信息管理系统实例 338.4.1项目层次架构介绍 358.4.2页面功能介绍 358.4.3数据库设计 368.4.4建立实体层 398.4.5建立自我跟踪层 438.4.6建立公共契约层 468.4.7建立WCF服务层 548.4.8建立Web应用层 648.4.9建立系统皮肤 658.4.10修改母版页 678.4.11配置WCF访问地址 698.4.12学

3、生列表页面 708.4.13学生信息编辑页面 758.4.14学生详细信息页面 958.4.15学生教育经历列表页面 1048.4.15编辑学生教育经历页面 112第八章分布式系统(WCF)基础 软件开发经历了面向过程,面向对象,面向组件,现今,面向服务(SOA)开发已风靡整个软件开发领域,是否掌握分布式开发是衡量一个软件工程师的重要标准之一。通过本章的学习,我们能掌握面向服务开发(SOAP)的基本原理和相关应用。我们精心安排了三个精典案例,在实例中穿插了知识点以便辅助大家学习、理解: 第一个例子介绍如何在控制台中应用WCF,实例讲解客户端如何访问WCF,如何获取服务器端的返回值。目的在于引导

4、大家入门,为掌握WCF应用建立感性认识。 第二个例子介绍如何在ASP.Net应用程序中应用WCF,实例讲解客户端如何与服务器进行数据交互。目的在于了解WCF的基本概念,并在相关知识点处作详细讲解,通过这个实例,我们将掌握WCF的基础知识。本章要点 WCF的概念 WCF绑定 WCF契约 序列化 WCF宿主 实体自我跟踪8.1什么是WCF 从WCF所处的位置来看,它是包含在.NET 3.0(也包括.NET 3.5)之中的。我们注意比较.NET 3.0与.NET 2.0,其实唯一的区别就是.NET 3.0包含了WCF(Windows Communication Fundation)、WPF(Wind

5、ows Presentation Fundation)、WF(Windows WorkFlow Fundation,或者还有CardSpace)而已。因此,我们认为WCF是.NET框架的一部分。尤为关键的是,WCF并不能脱离.NET框架而单独存在(非WCF客户端也可以调用WCF服务)。因此,虽然WCF是微软用以应对SOA解决方案的开发需求而专门推出的,但它并不是例如Spring、Struts那样的框架,也不是像EJB那样的容器或者服务器。严格的说,WCF就是专门用于服务定制、发布与运行以及消息传递和处理的一组专门类的集合,也就是所谓的“类库”。这些类通过一定方式被组织起来,共同协作,并为开发者

6、提供了一个统一的编程模式。WCF之所以特殊,是在于它所应对的场景与普通的.NET类库不同,它主要用于处理进程间乃至于机器之间消息的传递与处理,同时它引入了SOA(Service-Oriented Architecture,即面向服务架构)的设计思想,以服务的方式公布并运行,以方便客户端跨进程和机器对服务进行调用。实际上,WCF就是微软对于分布式处理的编程技术的集成者,它将DCOM(Distributed Component Object Model)、Remoting、Web Service、WSE(Web Services Enhancements)、MSMQ(MicroSoft Messa

7、ge Queue)集成在一起,从而降低了分布式系统开发者的学习曲线,统一了开发标准,并且获得了较好的性能改进。WCF与其它类库还有不同的地方,在于WCF充分地体现了运行时环境的概念。对于早期使用WCF的开发人员而言,就可能知道如果在.NET 2.0下要开发WCF,还需要专门下载一个Runtime Component 3.0版,其中就包含了WCF、WF等内容。在.NET中一贯存在所谓“宿主”的概念,整个.NET Framework(或者说是CLR)就可以认为是一个大的宿主,就像Java的虚拟机一样。由于WCF对服务有着专门的需求,对于服务端,需要发布和运行服务;对于客户端,则需要调用服务;因而对

8、于开发者,就需要编写定义、发布、运行、调用服务的相关代码。而服务就只能运行在特定的宿主上,这些宿主可以是控制台应用程序进程、Windows或Web应用程序进程,也可以是Windows服务进程,或者最常用的IIS宿主。在宿主内部,则封装了通道堆栈,其中又包含了对协议、编码、消息传输、代理的处理。而在通道层的顶部,还提供了一个高级运行时,以针对应用程序的开发人员。我们将以一个“Hello, World实例”开始,辅以相关基础知识点,初窥WCF。8.2 Hello, World实例本实例与传统入门教材相同,仍然以输出一个“Hello,World”字符串开始。实例将新建2个项目,第一个项目名为“Hel

9、loWorldService”,它提供WCF服务,并且以开发环境方式暴露一个端口供客户端调用;另外一个项目叫“HelloWorldClient”,它调用WCF服务方法,并输出返回值。本实例的运行结果如图所示:8.2.1创建WCF服务端程序1) 打开Microsoft Visual Studio 2010;2) 选择菜单文件新建项目;3) 在弹出的“新建项目”对话框中展开左边的“已安装的模板”Visual C#;4) 选择“WCF”;5) 在对话框右边选择“WCF Service Application“;6) 在对话框下部的“项目名“中输入”HelloWorldService“,在位置中输入”

10、 d:Exercise“,在解决方案名称输入” WcfSample“,确保选中”Create directory for solution“,确保未选中”Add to source control“,设置后的界面如下:7) 点击“OK“按钮,VS2010已自动建立了一个WCF Service Application,并且为我们自动打开了Service1.svc.cs文件;8) 打开“Solution Explorer”;(VS2010默认打开,位置在VS2010桌面的右边,如果VS2010没有打开,请使用快捷键Ctrl + W,S打开)9) 在“Solution Explorer”中展开“He

11、lloWorldService”;10) 双击“IService1.cs”文件;11) 用下面的代码/ / 提供一个WCF服务方法/ / 返回“Hello, World!”OperationContract /声明为“OperationContract”的方法将暴露在WCF服务器上string GetHelloWorld();替换第22行的注释/ TODO: Add your service operations here知识点:“ServiceContract”代表服务契约,表示IService1接口是一个WCF服务,这样,客户端就可以访问这个接口和它内部有效的方法了。“OperationC

12、ontract”代表操作契约,表示GetHelloWorld方法是服务契约中的一个方法,只有声明为“OperationContract”的方法才会被公开在WCF服务中。如果服务中没有任何一个方法声明为“OperationContract”,那么这个服务将没有任何意义。12) 右键点击HelloWorldService项目,在弹出的菜单中选择“Build”,VS2010会在“Error List”中提示“Error 1 HelloWorldService.Service1 does not implement interface member HelloWorldService.IService

13、1.GetHelloWorld() d:ExerciseWcfSample HelloWorldServiceService1.svc.cs 12 18 HelloWorldService”;13) 在“Error List”对话框中双击错误项,系统会自动打开“Service1.svc.cs”文件;14) 在打开的“Service1.svc.cs”文件中选择“IService1”并右击;15) 在弹出的右键菜单中选择“Implement Interface“”Implement Interface “,VS2010会自动在文件后面生成如下代码:public string GetHelloWor

14、ld() throw new NotImplementedException();16) 用return Hello, World!;替换throw new NotImplementedException();17) 重复第12步,VS2010将不会报任何编译时错误了;18) 选择“HelloWorldService“项目并右击,在弹出的菜单中选择”Properties“,系统会展示项目属性界面,如下图:19) 选择左边“Web“项,在右边展示的选择中选择“Service”“Use Visual Studio Development Server”“Specific port”;20) 在“S

15、pecific port“后面的文本框中输入“2027”,设置正确的界面如下:21) 展开“HelloWorldService”项目;22) 选择“Service1.svc“文件并右击,在弹出的菜单中选择“View in Browser”,如果正确的话,应在浏览器中出现如下界面:23) 如此,服务器端已完成了;8.2.2创建WCF客户端程序服务器端的服务写好了,我们再来了解客户端是如何调用的。 1) 打开上一节创建的WcfSample解决方案;2) 右击解决方案WcfSample;3) 在弹出菜单中选择“Add”“New Project”;4) 在弹出的“Add New Project”对话框

16、中左边展开“Installed Templates”;5) 选择“Visual C#”,并在对话框可边选择“Console Application”;6) 在对话框下部的“Name”中输入“HelloWorldClient”,并且中“Location”中输入“D:ExerciseWcfSample”,界面如下:7) 点击“OK”按钮,VS2010会自动在“WcfSample”解决方案下生成HelloWorldClient项目;8) 到此,WCF客户端就创建好了;8.2.3在客户端添加WCF引用在开始前,请重复第一节(创建WCF服务端程序)第18步至22步,运行WCF服务(请确保运行正常)。1)

17、 打开WcfSample解决方案;2) 展开HelloWorldClient项目;3) 右击“References”,在弹出的菜单中选择“Add Service References”;4) 在弹出的对话框的“Address”中输入WCF服务地址“http:/localhost:2027/Service1.svc”(也许您的WCF运行地址不相同,请输入您的正确地址)5) 点击“Go”按钮,系统会自动展示WCF服务端的相关服务接口;6) 在对话框的下部的“Namespace:”中输入“HelloWorldService”,完整的界面如下;7) 点击“OK”按钮完成添加引用操作,系统会自动在“He

18、lloWorldClient”项目下添加“Service References”文件夹,并添加了关于“HelloWorldService”的引用,如图:8) 至此,WCF引用就添加完了;8.2.4调用WCF服务准备工作已经完成,下面我们来看看如何调用WCF提供的GetHelloWorld方法呢。步骤如下:1) 打开WcfSample解决方案;2) 展开“WcfSample”“HelloWorldClient”,双击打开“Program.cs”文件,系统将展示大家熟悉的界面:3) 在Main方法中添加如下代码:/实例化一个WCF代理对象Service1Client client = new Se

19、rvice1Client();/获取从WCF服务方法返回的值string result = client.GetHelloWorld();/将GetHelloWorld方法返回值输出到屏幕Console.WriteLine(result);4) 如果“Program.cs”文件没有添加对“HelloWorldClient.HelloWorldService”的引用,请在“Program.cs”文件的引用代码块的最后一行加入如下代码:using HelloWorldClient.HelloWorldService;5) 右击“HelloWorldClient”,在弹出菜单中选择“Set as S

20、tartup Project”将其设置为启动项目;6) 按Ctrl + F5运行程序,运行界面如下:7) 如此,本实例已全部完成了。8.2 实体类应用实例本实例讲解WCF在Web应用程序上的应用,实例以一个实体类作为引子,WCF服务提供2个方法(根据编号获取学生信息和获取所有学生信息)并且将它们暴露在WCF服务上,以便客户端面访问。实例将整个应用为三个层次, 共同契约层,我们知道,WCF服务器端和客户端必须遵循相同的数据契约才能进行数据交换,为了达到这一目的,我们经常在项目中独立一个单独的项目来定义其它层都必须遵守的数据结构约定。共同契约层是其它项目共同依赖的对象,根据面向对象设计原则(依赖倒

21、置原则),为了将各个层次合理解耦获得“高内聚,低耦合”,于是我们将其抽象为接口。 实体服务层,WCF服务提供者,它提供了WCF服务(公开了操作方法)并将其宿主到IIS中,以供其它项目或系统调用。 用户界面层,将数据WCF服务层读取出来展示到界面上。8.2.1建立契约项目1) 打开VS2010,2) 点击菜单“File”“New”“Project”,在弹出的对话框中设置如下图:3) 点击“OK”按钮完成;8.2.2建立学生实体类1) 右击“EntitySample.Common”,在弹出的菜单中选择“Add”“New Item”,在弹出的对话框中设置如下:2) 点击“Add”按钮;3) 打开新建

22、的“Student.cs”文件,将下面的代码覆盖原有代码:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization;namespace EntitySample.Common DataContract public class Student / / 编号 / DataMember public int ID get; set; / / 学生姓名 / DataMember public string StudentName

23、 get; set; / / 学生年龄 / DataMember public int Age get; set; / / 身份证号码,没有“DataMember”标识,不能在WCF服务上公开 / public string Identification get; set; 知识点:(1)“DataContract”Attrbute代表数据契约,标识有“DataContract”的类才会被序列化,才能在网络上进行数据传输;(2)标识有“DataMember”的属性说明它会被WCF序列化,客户端才能够取得它的属性值;(3)请注意Identification属性,它没有被标识为“DataMembe

24、r”,那么它将不会被序列化,也就是说WCF客户端将不能获得它的值(实例最后会展示实验结果);8.2.3建立实体服务契约1) 右击“EntitySample.Common”,在弹出的菜单中选择“Add”“New Item”,在弹出的对话框中设置如下:2) 点击“Add”按钮完成添加文件;3) 打开“IEntityService.cs”文件,用下面的代码覆盖原有内容:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;namespace

25、 EntitySample.Common ServiceContract public interface IEntityService / / 根据编号(ID)获取学生信息 / / 编号 / 学生实体 OperationContract Student GetStudentByID(int id); / / 获取所有学生信息 / / OperationContract IList GetAllStudent(); 知识点:(1) 我们在“IEntityService.cs”文件中定义了二个操作契约,其中GetStudentByID方法完成“根据ID获取学生信息”的功能,将查找到的学生实体返回

26、;而“GetAllStudent”方法将返回所有的学生信息到客户端;(2) IEntityService接口将会被接下来的2个项目(EntitySample.Service和EntitySample.Web)引用。它是引用者的依赖项,因为它的变更会引起依赖项变更;8.2.4建立WCF服务代理1) 下面我们介绍如何使用代码建立WCF代理,使得Web客户端实现对WCF服务的调用;2) 右击“EntitySample.Common”,在弹出的菜单中选择“Add”“New Item”,在弹出的对话框中设置如下:3) 点击“Add”按钮;4) 用下面的代码覆盖原有代码:using System;usin

27、g System.Collections.Generic;using System.Linq;using System.Web;using System.ServiceModel;namespace EntitySample.Common public static class ServiceProxyFactory /WCF服务的地址 private static string TestServiceURL = ; / / 根据WCF服务的地址获取服务代理 / / 服务接口契约 / WCF服务地址 / 关于服务契约的通道实例 private static T GetServiceProxy(

28、string serviceAddress) /获取BasicHttpBinding实例 var binding = GetBasicHttpBinding(); /实例化终结点 EndpointAddress address = new EndpointAddress(serviceAddress); /创建一个关于终结点的BasicHttpBinding通道工厂 ChannelFactory factory = new ChannelFactory(binding, address); /创建一个关于服务接口契约的通道 T channel = factory.CreateChannel()

29、; /返回通道 return channel; / / 实例化一个BasicHttpBinding / / 实例化的BasicHttpBinding private static BasicHttpBinding GetBasicHttpBinding() /实例化一个BasicHttpBinding var binding = new BasicHttpBinding(); /设置访问权限为None binding.Security.Mode = BasicHttpSecurityMode.None; /设置最在接收消息长度 binding.MaxReceivedMessageSize = int.MaxValue; /设置BasicHttpBinding的SOAP复杂度的最大值,这样可以保护对终结点资源的访问层次 binding.ReaderQuotas.MaxArrayLength = int.MaxValue; /设置

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1