首页 > 代码库 > WCF入门教程(三)属性标签

WCF入门教程(三)属性标签

属性标签,成为定义协议的主要方式。先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则。

服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义。如果已经有所了解,请直接PASS。 

1、ServiceContract(服务协定)

全名: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 &lt;portType&gt; 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

 

2、OperationContract(操作协定)

全名: 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);

如果需要深入了解,可以查看以下

http://msdn.microsoft.com/zh-cn/library/system.servicemodel.operationcontractattribute(v=vs.100).aspx

 

3、DataContract(数据协定)

 全名:System.Runtime.Serialization.DataContractAttribute

功能:指定该类型要定义或实现一个数据协定,并可由序列化程序(如 DataContractSerializer)进行序列化。若要使其类型可序列化,类型作者必须为其类型定义数据协定。

简单一句话:定义数据协定,用于数据传输。

案例:

    // 使用下面示例中说明的数据协定将复合类型添加到服务操作
    [DataContract]
    public class CompositeType
    {
        bool boolValue = http://www.mamicode.com/true;
        string stringValue = http://www.mamicode.com/"Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue =http://www.mamicode.com/ value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue =http://www.mamicode.com/ value; }
        }
    }

 

序列化时,也应用到此标签,具体可见:

http://www.cnblogs.com/yank/p/3198082.html

深入了解:

http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractattribute(v=vs.100).aspx

 

4、DataMember(数据成员协定)

全名:  System.Runtime.Serialization.DataMemberAttribute

功能:指定该成员是数据协定的一部分并可由 DataContractSerializer 进行序列化。

简单一句话:标识数据协定的成员

案例:

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue =http://www.mamicode.com/ value; }
        }

如需深入了解:

http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datamemberattribute(v=vs.100).aspx