WCF
- 服务契约
- 数据契约 (DataContractAttribute、DataMemberAttribute)
- 消息契约(MessageContractAttribute、MessageHeaderAttribute、MessageBodyMemberAttribute)
契约
服务契约
[ServiceContract(Name="HelloWorld",Namespace="http://oec2003.cnblogs.com"] public interface IHelloWorldService { }
数据契约
DataContractAttribute
特性有IsReference、Name和Namespace三个属性:
IsReference: bool类型,表示在进行序列化的时候是否保持对象现有的引用结构。
Name:名称。
Namespace:命名空间。
DataMemberAttribute
特性有如下四个属性:
EmitDefaultValue:表明在数据成员的值等于默认值的情况下,是否还须要将其序列化到最终的XML中,默认值为true,表示默认值会参与序列化。
IsRequired:bool类型,表明属性成员是否是必须的成员,默认值为false。
Name:数据成员的别名。
Order:相应的数据成员在最终序列化的XML中出现的位置,默认是按字母顺序排列的。
[DataContract(IsReference=true,Name="MyUser",Namespace="http://oec2003.cnblogs.com")] public class User { [DataMember] public int Age { get; set; } [DataMember(Name = "UserName", IsRequired = true, Order = 1)] public string Name { get; set; } [DataMember] public string Email { get; set; } }
消息契约
MessageContractAttribute
通过在一个类型上使用MessageContractAttribute标记可以使之成为一个消息契约。MessageContractAttribute特性含有如下几个属性:
IsWrapped:是否为定义的主体成员(一个或者多个)添加一个额外的根节点。
WrapperName:根节点的名称。
WrapperNamespace:根节点的命名空间。
ProtectionLevel:表示保护级别,WCF中通过System.Net.Security.ProtectionLevel枚举定义消息的保护级别。一般有3种可选的保护级别:None、Sign和EncryptAndSign。
MessageHeaderAttribute
使用MessageHeaderAttribute标记的数据成员将会出现在SOAP消息的头部,该特性包含下面几个属性:
Actor:为一个URI值,表示处理该报头的目标节点。
MustUnderstand:bool类型,表明Actor定义的节点是否必须理解并处理该节点。
Name:名称。
Namespace:命名空间。
ProtectionLevel:表示保护级别。
Relay:表明该报头是否需要传递到下一个SOAP节点。
MessageBodyMemberAttribute
使用MessageHeaderAttribute标记的数据成员将会出现在SOAP消息的主体部分,该特性包含下面的属性:
Order:Order属性用来控制成员在SOAP主体部分中出现的位置,默认按字母顺序排列。
Name:名称。
Namespace:命名空间。
ProtectionLevel:表示保护级别
[MessageContract(IsWrapped=false,WrapperName="MyMessage",WrapperNamespace="http://oec2003.com")] public class MessageTest { [MessageHeader(Actor="http://oec2003.com/Age",MustUnderstand=true,Name="MyAge", Namespace="http://oec2003.com",Relay=true)] public int Age { get; set; } [MessageHeader] public string Name { get; set; } [MessageBodyMember(Order = 1)] public string Email { get; set; } }
<system.serviceModel> <services> <service name="WCFConsole.User" behaviorConfiguration="TestBehacior"> <!--宿主--> <host> <baseAddresses> <add baseAddress="http://localhost:8080/User" /> </baseAddresses> </host> <!--ABC--> <endpoint address="" binding="basicHttpBinding" contract="WCFDemo.IUser" > </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="TestBehacior"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>