属性标签,成为定义协议的主要方式。先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则。
服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义。如果已经有所了解,请直接PASS。
全名:System.ServiceModel.ServiceContractAttribute
功能:指示接口或类在应用程序中定义服务协定。
简单一句话:标识此接口是否是服务协定,是否需要公开为服务。
详细:使用接口(或类)上的 ServiceContractAttribute 属性定义服务协定。然后使用一个或多个类(或接口)方法中的 OperationContractAttribute 属性定义协定的服务操作。实现服务协定后并将其与binding和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用。
使用规则:
ConfigurationName property specifies the name of the service element in the configuration file to use. ‘ data-guid="d037a150251467538aa0145aea860034">ConfigurationName 属性指定要使用的配置文件中的服务元素的名称。
Name and Namespace properties control the name and namespace of the contract in the WSDL <portType> element.‘ data-guid="3dcabfedfb715816bc054e081f7fa666">Name 和 Namespace 属性控制 WSDL <portType> 元素中的协定名称和命名空间。
SessionMode property specifies whether the contract requires a binding that supports sessions.‘ data-guid="e16c32bc0ddf4a1a155ae11f739186c5">SessionMode 属性指定协定是否需要支持会话的绑定。
CallbackContract property specifies the return contract in a two-way (duplex) conversation.‘ data-guid="7c39f275ecbc6240e25c37160a05e421">CallbackContract 属性指定双向(双工)对话中的返回协定。
HasProtectionLevel and ProtectionLevel properties indicate whether all messages supporting the contract have a explicit ProtectionLevel value, and if so, what that level is.‘ data-guid="e3ee6246979eff1ff7fb4715a9aa2ae9">HasProtectionLevel 和 ProtectionLevel 属性指示是否所有支持协定的消息都具有一个显式 ProtectionLevel 值,如果有,处于什么级别。
案例:
[ServiceContract(Namespace="http://wcf.yank.com",Name="Service1",ProtectionLevel=ProtectionLevel.EncryptAndSign)] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: 在此添加您的服务操作 }
深入了解:
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicecontractattribute(v=vs.100).aspx
全名: System.ServiceModel.OperationContractAttribute
作用:指示方法定义一个操作,该操作是应用程序中服务协定的一部分。
简单一句话:标识哪些操作属于服务协定一部分。如果不设置该属性,使用者则看不到此方法。
OperationContractAttribute properties to control the structure of the operation and the values expressed in metadata: ‘ data-guid="6f10b34c0a41805af8589ed754b310d6">使用 OperationContractAttribute 属性控制该操作的结构以及以元数据表示的值:
Action property specifies the action that uniquely identifies this operation.‘ data-guid="03927c54d1e251beaa4ef229b0101f06">Action 属性指定唯一标识该操作的操作。 根据请求消息的操作将它们调度至方法。
AsyncPattern property indicates that the operation is implemented or can be called asynchronously using a Begin/End method pair.‘ data-guid="c68b9c5f46dd7bb03b6ae47afa1f4aa2">AsyncPattern 属性指示使用 Begin/End 方法对可以实现或异步调用该操作。
HasProtectionLevel property indicates whether the ProtectionLevel property has been explicitly set.‘ data-guid="a105ec936bbd2e526598977a8506b068">HasProtectionLevel 属性指示是否已显式设置 ProtectionLevel 属性。
IsOneWay property indicates that the operation only consists of a single input message.‘ data-guid="0af1caf558c4ce7fef4145ca56d62a9e">IsOneWay 属性指示该操作只包含单个输入消息。该操作没有关联的输出消息。
IsInitiating property specifies whether this operation can be the initial operation in a session.‘ data-guid="96635912617220342641b21fc250513d">IsInitiating 属性指定该操作是否可以是会话中的初始操作。
IsTerminating property specifies whether attempts to terminate the current session after the operation completes.‘ data-guid="1eee18b8405eca5cd76e3638675d64c1">IsTerminating 属性指定该操作完成后, 是否试图终止当前会话。
ProtectionLevel property specifies the message-level security that an operation requires at run time.‘ data-guid="91dee0dccec92693c8ce1e0923fafb70">ProtectionLevel 属性指定运行时操作要求的消息级安全性。
ReplyAction property specifies the action of the reply message for the operation.‘ data-guid="2345a847f10bc78e42ca6b50aaa45c22">ReplyAction 属性指定该操作答复消息的操作。
ReplyAction property specifies the action of the reply message for the operation.‘ data-guid="2345a847f10bc78e42ca6b50aaa45c22">案例:
[OperationContract] string GetData(int value);
如果需要深入了解,可以查看以下
全名:System.Runtime.Serialization.DataContractAttribute
功能:指定该类型要定义或实现一个数据协定,并可由序列化程序(如 DataContractSerializer)进行序列化。若要使其类型可序列化,类型作者必须为其类型定义数据协定。
简单一句话:定义数据协定,用于数据传输。
案例:
// 使用下面示例中说明的数据协定将复合类型添加到服务操作 [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } }
序列化时,也应用到此标签,具体可见:
http://www.cnblogs.com/yank/p/3198082.html
深入了解:
全名: System.Runtime.Serialization.DataMemberAttribute
功能:指定该成员是数据协定的一部分并可由 DataContractSerializer 进行序列化。
简单一句话:标识数据协定的成员
案例:
[DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } }
如需深入了解:
原文:http://www.cnblogs.com/yank/p/3666672.html