DotNet关键知识点——WCF篇(一)
来源:互联网 发布:杭州派购网络 编辑:程序博客网 时间:2024/05/17 09:09
本章介绍WCF的基础概念。
消息交互模式说明实现命令/响应
WCF是.NET 3.0之后主推的程序间的业务导向(Service Oriented)的通信基础架构。
WCF相关的通信协议参考:
SOAP 1.2 spec: http://www.w3.org/TR/soap/
WSDL 1.1 spec: http://www.w3.org/TR/wsdl
XML Schema primer: http://www.w3.org/TR/xmlschema-0/
WCF业务主要由以下三部分组成:
服务(Service类) 描述和实现提供的服务,由服务约定(Contract,S/C两侧约定的接口)接口继承
主机(Host) 用于开展业务的基础
端点(endpoint) 供客户连接服务的接入点。端点通常表现为ABC,即地址(Address,如URI),绑定模式(Binding,描述协议和安全性等)以及服务约定
约定Contract是WCF业务开展的关键,约定主要包括三类,在以下三节介绍。
1. 服务约定(Service Contract)
定义服务的行为。
服务约定接口上加ServiceContractAttribute标记
在接口的方法中加OperationContractAttribute标记
Request/Response总有一个返回消息(如果是void类型则是一个空SOAP体消息)OperationContractAttribute.IsOneWay采用默认的false
且不作Duplex通道设置单向
OneWay不返回消息,也无法返回错误,因此不在有这些需求的场合下使用。
使用消息队列时总采用OneWay模式OperationContractAttribute.IsOneWay=true双工
Duplex等待返回消息;
可能有服务端发来的独立消息。
注意:
安全问题;
要求会话(Session)维护,而SO希望无状态模式;
互通性丧失,因为返回通道(Callback Channel)由WCF维护;
如果两侧传递不采用单向通信(IsOneWay=true)会导致线程问题。
定义一个服务约定接口(加ServiceContract(CallbackContract=IxxxHandler)),一个返回消息服务约定接口IxxxHandler,而其方法OperationContractAttribute.IsOneWay=true;建立Session,用ServiceBehaviorAttribute修饰服务约定实现类,并相应设置其参数(如InstanceContextMode=PerSession);在服务约定实现动作中调OperationContext.Current.GetCallbackChannel()打开通道获得接口IxxxHandler,并调其方法完成消息返回。
参数类型命名
用[(return:) MessageParameter(Name=…)] 标记,指定相应类型在WSDL中出现的名称
出错处理(Fault)
在约定接口相应方法上加FaultContractAttribute(typeof(内嵌类型))标记,在出错处抛出FaultException<内嵌类型>(内嵌类型 p)。也可用不带类型的FaultException。
2. 数据约定(Data Contract)
用于定义较复杂的参数和返回值类型,以指导数据的序列化。用DataContractAttribute修饰对应的类型(struct, class和enum等)。在默认情况下这个标记存在于相关类型上。
采用数据约定的数据均在SOAP消息的消息体(body)中传送,对应动作名(operation name)、参数名等均用相应的包裹体现。
在数据结构的成员上用DataMemberAttribute修饰:
IsRequired属性用于进行版本控制;
Order属性指定顺序(首先是基类成员,其次是未赋Order的成员以字母顺序,再次是赋Order的按指定顺序);
EmitDefaultValue属性指定是否发送采用默认值的项,默认为true。
在枚举体成员上用EnumMemberAttribute修饰。
在数据约定中,只有被上述两个成员标记修饰的成员才在数据序列化中被考虑。
集合
1. 一个具体的实现IEnumerable/IEnumerable和Add方法的可序列化类型(标记SerializableAttribute),(通过服务的元数据)在客户端转换成对应类型的数组。
2. 在自定义集合类型之前使用CollectionDataContractAttribute,Name属性置为"XXX{0}",这样在客户端将对应转换成XXXT,其中T是集合元素泛型实参。
继承
在基类上加KnownTypeAttribute,以允许的派生类的类型(typeof(…))作为参数。
3. 消息约定(Message Contract)
用于详细指定数据在SOAP中的传递方式,以及自定消息头。
消息约定必须同时作用到一个动作的参数和返回值上,或者完全不使用。
用MessageContractAttribute修饰对应的类型,其属性主要包括:
IsWrapped属性用于在SOAP中对数据内容进行包裹(用WrapperName属性指定的名字或类型本身名称,以及WrapperNameSpace属性指定的名空间),WCF默认IsWrapped为false,而通常其他平台的处理是进行包裹的。
ProtectionLevel属性用于指定消息传输的安全特性。
具体成员可位于消息头和消息体分别用一下标记指定:
MessageHeaderAttribute
其ProtectionLevel属性用于指定安全特性,Actor是一个URI,用于指定消息的目标,默认为当前服务,MustUnderstand用于指定目标是否必须能够处理该消息,Relay用于指定在无法处理的情况下消息是否能够传递到下一个接收者。
MessageBodyAttribute
Name用于为项目起名,Namespace用于指定一个名空间,ProtectionLevel和Order同上。
- DotNet关键知识点——WCF篇(一)
- DotNet关键知识点——WCF篇(二)
- DotNet关键知识点——WCF篇(三)
- DotNet关键知识点——WCF篇(五)
- DotNet关键知识点——WCF篇(四)
- DotNet关键知识点——WCF篇(六)
- DotNet关键知识点——WPF篇(一)(范德成编辑批注版)
- DotNet关键知识点——WPF篇(二)
- DotNet关键知识点——WPF篇(三)
- DotNet关键知识点——WPF篇(四)
- DotNet关键知识点——WPF篇(五)
- DotNet关键知识点——WPF篇(六)
- DotNet关键知识点——WPF篇(七)
- DotNet关键知识点——WPF篇(八)
- WCF学习(一)——了解WCF
- WCF入门教程——什么是WCF(一)
- 【WCF】WCF RESTful(一)——简介
- Python关键知识点整理(一)
- qt中如何去掉主窗口标题栏
- VC2005使用boost环境的搭建
- 使用 google音乐播放器乱码解决
- 20100128 Lecture4_Monad Parser
- AMD欲借CPU和GPU整合优势对抗Nvidia
- DotNet关键知识点——WCF篇(一)
- DotNet关键知识点——WCF篇(二)
- mfc中滑动条的使用(实现和编辑框的关联)
- 【独家】鲜为人知的Google go语言若干细节
- DotNet关键知识点——WCF篇(三)
- ch1处理器管理
- 象棋外挂的一些思路
- 2010-01-28
- SQL中truncate table和delete的区别