WCF编程权威指南 - (EPUB全文下载)

文件大小:0.33 mb。
文件格式:epub 格式。
书籍内容:

WCF编程权威指南
第1章 WCF应用程序基础
第2章 消息与通道
第3章 协定
第4章 终结点
第5章 配置文件
第6章 双工与会话
第7章 错误处理
第8章 路由与发现
第9章 验证与授权
第10章 扩展WCF
第11章 Web集成
第1章WCF应用程序基础
作为开篇,本章的主要任务是了解WCF应用程序的基本实现过程。读者可以通过对本章的学习来了解以下内容:
编写WCF应用项目的基本思路;
ServiceHost类的用法;
客户端通过服务引用来调用WCF服务;
使用ChannelFactory类来调用WCF服务。
1.1 关于本书示例项目的说明
WCF是Windows平台下各种通信方案的集成技术,它不仅仅可以寄宿在IIS中作为Web服务公开,还可以在独立的Windows进程中运行。也可以将WCF应用封装为类库,以供其他应用程序调用。
本书的所有示例都是基于普通的.NET应用程序项目,可以直接运行,而无须依赖Web服务器组件。因此,读者可以很方便地使用本书示例。
1.2 WCF服务的基本实现步骤
本节主要介绍WCF服务器端的实现,客户端的实现将在下一节中讲述。
一般来说,要让WCF服务运行起来,开发者需要依次完成以下几个部分:
定义协定。主要是服务协定(ServiceContract),从类型角度看,服务协定是一个接口,接口本身作为服务协定的容器。在服务协定内部,可以包含N个(N为1个或多个)服务操作协定(OperationContract),映射到接口类型上,服务操作协定是一个方法。服务操作必须是方法,不能是属性和事件等成员。有些时候,除了定义服务协定外,还需要定义数据协定(DataContract)和消息协定(MessageContract),有关这些内容,本书会在后续的章节中介绍。
实现服务类。服务协定只是一个接口,它可以在服务器和客户端之间共享,作为双方用来通信的一种“约定”。服务协定只是一个接口,并不包含实际的代码实现,因此,需要一个类来实现协定接口,提供具体的功能,这就是服务类。客户端会通过访问服务协定接口的某个方法来调用WCF服务,当消息发送到服务器后,服务器会找到实现协定接口的类,并将其实例化,然后调用与操作协定匹配的方法(即服务协定接口的实现方法)。例如,服务协定接口定义了一个Work方法作为服务操作协定,当客户端访问协定接口的Work方法时,消息会传到服务器,服务器实例化服务类,并找到类中的Work方法,然后调用,最后把调用结果发回给客户端。
寄宿WCF服务。对于Web项目,可以不考虑这一步,因为项目模板会生成相关的代码,使WCF服务能够在IIS服务上运行。对于独立进程中的WCF服务,必须使用ServiceHost类来启动服务,之后客户端才能调用服务。
接下来,请读者参考以下步骤,完成一个简单的WCF服务应用程序。
(1)以管理员身份运行VisualStudio,然后新建一个控制台应用程序。由于在进程中寄宿WCF服务时,某些情况下要求运行用户具有管理员权限,因此,建议以管理员身份运行开发环境,这样在调试的时候,管理员权限会传递到示例进程中,以避免因权限不够而运行失败。
(2)与WCF相关的许多类型都位于程序集System.ServiceModel中,因此需要在项目中添加对该程序集的引用。
(3)定义服务协定接口,本示例中接口的名字为IDemo,代码如下:
服务协定的定义与一般接口类型无异,但是,必须注意的是,要使接口能够作为服务协定被公开,在接口的定义上必须附加ServiceContractAttribute,否则WCF服务在运行时不会将接口识别为服务协定。在服务协定接口内,需要用OperationContractAttribute来标记操作协定,在本例中,Add方法会被视为操作协定公开,但Run方法不会被作为操作协定公开,即客户端是无法调用Run方法的,因为该方法上没有附加OperationContractAttribute。
(4)定义一个类,实现服务协定接口,代码如下:
Add方法会向客户端公开,本例将返回两个参数相加的和,而Run方法在前面的协定接口中并没有标注为操作协定,即该方法不会向客户端公开,此处无须添加任何具体代码。
读者需要注意的是,服务器与客户端是通过协定来交互的,即实现服务协定的类不需要对外公开,它只在服务器内部使用,因此该类不应该声明为public,可以定义为internal。由于class默认的访问级别为internal,故本例中可以省略internal关键字。
(5)创建ServiceHost实例,寄宿WCF服务。
在实例化ServiceHost类时,需要传递一个表示服务实现类的Type作为参数,注意此处的Type的类型是实现了服务协定接口的类,在本例中为DemoService类,不能使用服务协定接口的Type,因为接口不能实例化。另外,还有一个可选参数——baseAddresses,它是一个URI数组,可以包含多个URI,它表示服务公开的基础地址。
调用ServiceHost类的构造函数后,可以对服务进行一些设置,比如添加服务终结点(EndPoint)。服务终结点用于向客户端公开WCF服务,它需要指定一个有效的地址,本例中指定了一个相对地址demo,结合传递给ServiceHost类构造函数的基址,该服务终结点的地址变为:http://localhost:500/demo。localhost表示本地计算机,端口号为500。如果在调用ServiceHost构造函数时没有指定任何基址,那么在添加终结点时就必须使用完整的URI。比如
服务终结点除了包含URI外,还包含一个绑定(Binding)和一个协定(Contract),协定就是前面所定义的服务协定,而绑定是负责通信层控制的,比如采用HTTP协议还是TCP协议通信、传输数据的缓冲区有多大等。将地址、绑定和协定三者结合起来,组成了终结点的基本功能,即WCF服务将在地址http://localhost:500/d ............

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家 AI应用导航 研报之家
书云 Open E-Library » WCF编程权威指南 - (EPUB全文下载)