本文涉及内容:
- 理解面向服务
- 什么是WCF
- 理解契约式编程
- 常见的几个消息交换模式
- 使用配置文件部署服务
- 使用代码部署服务
一、理解面向服务(Service-Oriented-Architecture)
是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。SOA指出当前系统应该足够灵活,从而允许在不打乱当前成功运行的体系结构和基础结构的前提下,改动已有的体系结构。
SOA原则:
边界清晰
服务自治
兼容性基于策略
共享模式(schma)和契约
二、什么是WCF
WCF(Windows Communication Foundation)是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口。
根据MSDN上的定义:WCF为.NetFramework 提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。
WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。WCF具有如下的优势:1、统一性 2、互操作性 3、安全与可信赖 4、兼容性
如图:
三、理解契约式编程
契约合同能保障双方的利益,对客户来说,合同规定了供应者要做的工作;对供应者来说,合同说明了如果约定的条件不满足,供应者没有义务一定要完成规定的任务。该道理同样也适用于软件. 所以,契约式编程是编程的一种方法。
WCF服务契约 服务契约描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceModel 。接口类中契约标示属性ServiceContract,行为标示属性OperationContract,以及DataContract、DataMember属性。
四、常见的几个消息交换模式
1.请求-响应模式 (Request/Reply)
这种交换模式是使用最多的一中,它有如下特征:
1).调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了。 3).在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明。
它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式
[OperationContrac]
void Test(int intVal);
2.单工消息处理模式 (One-Way Calls)
在这种交换模式中,存在着如下的特征
1).没有返回值,返回类型只能为void 2).不能包含ref或者out类型的参数 3).只有客户端发起请求,服务端并不会对请求进行回复。
通过设置OperationContract的IsOneWay=True可以将满足要求的方法设置为这种消息交换模式,方法如下:
[OperationContract(IsOneWay=true)]
void Test(int intVal);
3.双工消息处理模式 (Duplex)
注意,这种方式和request/reply方式的图示也很类似,当二者存在着至关重要的不同,它在客户端也有监听节点,在callback的时候,服务器和客户端的角色会进行交换,服务端此时成了严格意义上的客户端,而客户端此时能接受服务端的callback请求,所以成为了服务端。呵呵,辩证法,都拗口死了,当事实就是这种,就像对与错一样,会相互转换,失败是成功之母,而成功是失败之源。
Duplex的特征主要包括 :1).消息交换过程中,服务端和客户端角色会发生调换 2).服务端处理完请求后,返回给客户端的不是reply,而是callback请求。 关于消息交换模式还有流模式、发布-订阅模式,这里只抛砖引玉,具体的简介请查阅相关资料.
五、使用配置文件部署服务
1.服务的三要素(ABC) A:Address 意味着在哪里(也含有传输方式信息) ; B:Binding 意味着怎么做(与地址的传输方式要匹配); C:Contract意味着做什么(服务契约)
2.端点地址定义 (在配置文件中定义终结点地址)
endpoint | 服务和终结点 |
binding | 绑定(可选) |
behaviors | 行为(可选) |
配置文件如下:
1 <system.serviceModel> 2 <services> 3 <service 4 name="CalculatorService" 5 behaviorConfiguration="CalculatorServiceBehavior"> 6 <host> 7 <baseAddresses> 8 <add baseAddress="http://localhost:8000/service"/> 9 </baseAddresses> 10 </host> 11 12 <endpoint address="" binding="wsHttpBinding" contract="Samples.ICalculator" /> 13 14 <endpoint address="/test" binding="wsHttpBinding" 15 contract="Samples.ICalculator" /> 16 17 <endpoint address="net.tcp://localhost:9000/service" 18 binding="netTcpBinding" 19 contract="Samples.ICalculator" /> 20 </service> 21 </services>
六、使用代码部署服务
1.服务的三要素(ABC) A:Address 意味着在哪里(也含有传输方式信息) ; B:Binding 意味着怎么做(与地址的传输方式要匹配); C:Contract意味着做什么(服务契约)
2.主要的系统内置绑定(Binding) 如图:
3.代码:
1 2 ServiceHost host = new ServiceHost(typeof(winServer.myClass)); 4 NetTcpBinding tcpBind = new NetTcpBinding(); 5 string address = "net.tcp://localhost:8100/test"; 6 host.AddServiceEndpoint(typeof(ClassLibrary.Interface), tcpBind, address); 7 host.Open(); 8
写此篇博文主要是相对自己对WCF的知识点进行一个总结,只有总结才会发现新的突破点,才会发现自身的不足之处.继续总结中...