最后一章将进行WCF扩展和新特性的学习,这部分内容有一定深度,有一个基本的了解即可,当需要自定义一个完整的SOA框架时,可以再进行细致的学习和实践。

 

快速入门系列--WCF--08扩展与新特性

服务端架构体系的构建主要包含接下来的几个要素:服务描述、终结点分发器选择机制、信道分发器、终结点分发器、分发运行时、分发操作。

ServiceDescription服务描述包含一组终结点和服务行为列表,而终结点包含服务地址、绑定和契约信息,契约中则包含操作和契约行为,操作信息中包含操作行为

终结点分发器具有两个消息筛选器,一个是地址筛选器,另一个是契约筛选器,均继承自MessageFilter,信道分发器通过他们来选择某个终结点分发器来接受请求消息,此外还有一个FilterPriority来决定顺序。在WCF中,终结点ServiceEndpoint和其分发器EndpointDispatcher一一对应。

信道分发器ChannelDispatcher包含信息监听器、错误处理器、进行流量控制的服务限流器和信道初始化器,这部分可以扩展的属性包括异常细节信息的传播、手工寻址、最大挂起消息数、同步/异步消息接受和事物控制。

分发运行时DispatcherRuntime是整个WCF服务端运行的核心,其包含很多扩展组件,例如关于安全的ServiceAuthenticationManager、ServiceAuthorizationManager、RoleProvider和AuthorizationPolicy,与服务激活相关的实例提供者、上下文提供者、单例实例上下文和实例上下文初始化器,与并发控制有关的同步上下文,可以对接受的请求消息和回复消息进行相应操作的消息检验器,运行时操作列表和用于选择操作的选择器,自己在项目构建中很多时候可以参考这样的方式。此外,还包括以下的扩展属性,授权、安全审核、事务和会话、未处理的操作、SOAP报头验证、并发控制。

分发操作是在Servicehostk开启后,有OperationDescription转化来的,附加在其上的可扩展组件包括调用上下文初始化器CallContextInitializer,参数检验器ParameterInspector,用于消息序列化和反序列化的消息格式化器DispatchMessageFormatter,用于操作方法的执行的操作调用器OperationInvoker。

 

客户端架构体系的构建则包含如下几个要素:创建ChannelFactory<TChannel>、客户端运行时、客户端操作、服务代理和服务调用。在通过调用构造函数创建一个ChannelFactory<TChannel>对象后,WCF会根据指定的终结点创建一个ServiceEndpoint对象,其整个结构如下图示。

快速入门系列--WCF--08扩展与新特性

 通过定义四种行为对WCF扩展,这4中行为分别是服务行为、终结点行为、契约行为和操作行为,它们具有相同的4个方法Validate、AddBindingParameters、ApplyDispatchBehavior和ApplyClientBehavior。原书还包含一个关于本地化的扩展例子,需要时可以查阅,注意Properties中的资源文件。

ServiceHost对WCF的扩展一般是通过继承自ServiceHost的自定义类来实现,但需要注意,对Description、分发运行时的定制是无效的,此外可以通过自定义类来集成Unity。

 

快速入门系列--WCF--08扩展与新特性

简化开发体验内容包括:默认终结点(标准终结点)、默认绑定配置、默认行为配置和无.svc文件服务激活等。这部分默认的配置就不一一介绍了,唯一需要介绍的就是WCF提供的标准终结点,如下表所示。

标准终结点 描述
mexEndpoint 用于公开服务元数据的标准终结点
dynamicEndpoint 使用WS-Discovery在运行时动态查找终结点地址的标准终结点
discoveryEndpoint 发送/接收发现消息的标准终结点
UdpDiscoveryEndpoint 通过UDP多播方式发送/接收发现消息的标准终结点
announcementEndpoint 由服务用于发送公告消息的标准终结点
udpAnnouncementEndpoint 由服务用于通过UDP绑定发送公告消息的标准终结点
workflowControlEndpoint 可用于对工作流实例调用控制操作的标准终结点
webHttpEndpoint 带有自动添加webHttpBehavior行为的WebHttpBinding绑定的标准终结点
webScriptEndpoint 带有自动添加webScriptEnablingBehavior行为的WebHttpBinding绑定的标准终结点

此外,无.svc文件服务的配置如下所示。

 

1 <system.serviceModel>
2 <serviceHostingEnvironment>
3 <serviceActivations>
4 <add service="Sory.CoreFramework.Service.EmployeeService" relativeAddress="EmployeeService.svc"/>
5 </serviceActivations>
6 </serviceHostingEnvironment>
7 </system.serviceModel>
View Code

相关文章:

  • 2021-08-09
  • 2022-12-23
  • 2021-05-02
  • 2021-12-12
  • 2021-04-15
  • 2021-10-19
猜你喜欢
  • 2022-01-15
  • 2021-12-23
  • 2021-05-18
  • 2021-04-02
  • 2021-07-19
相关资源
相似解决方案