WCF入门教程(三)定义服务协定

时间:2022-09-01 08:53:36

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

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

1、ServiceContract(服务协定)

全名:System.ServiceModel.ServiceContractAttribute

功能:指示接口或类在应用程序中定义服务协定。

简单一句话:标识此接口是否是服务协定,是否需要公开为服务。

详细:使用接口(或类)上的 ServiceContractAttribute 属性定义服务协定。然后使用一个或多个类(或接口)方法中的 OperationContractAttribute 属性定义协定的服务操作。实现服务协定后并将其与binding和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用。

使用规则:

  • ConfigurationName 属性指定要使用的配置文件中的服务元素的名称。

  • Name 和 Namespace 属性控制 WSDL <portType> 元素中的协定名称和命名空间。

  • SessionMode 属性指定协定是否需要支持会话的绑定。

  • CallbackContract 属性指定双向(双工)对话中的返回协定。

  • 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 属性控制该操作的结构以及以元数据表示的值:

  • Action 属性指定唯一标识该操作的操作。 根据请求消息的操作将它们调度至方法。

  • AsyncPattern 属性指示使用 Begin/End 方法对可以实现或异步调用该操作。

  • HasProtectionLevel 属性指示是否已显式设置 ProtectionLevel 属性。

  • IsOneWay 属性指示该操作只包含单个输入消息。该操作没有关联的输出消息。

  • IsInitiating 属性指定该操作是否可以是会话中的初始操作。

  • IsTerminating 属性指定该操作完成后, 是否试图终止当前会话。

  • ProtectionLevel 属性指定运行时操作要求的消息级安全性。

  • ReplyAction 属性指定该操作答复消息的操作。

案例:

        [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 = 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

深入了解:

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 = value; }
}

如需深入了解:

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