WCF入门教程(三)属性标签
属性标签,成为定义协议的主要方式。先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则。
服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义。如果已经有所了解,请直接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);
如果需要深入了解,可以查看以下
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
深入了解:
4、DataMember(数据成员协定)
全名: System.Runtime.Serialization.DataMemberAttribute
功能:指定该成员是数据协定的一部分并可由 DataContractSerializer 进行序列化。
简单一句话:标识数据协定的成员
案例:
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
如需深入了解:
WCF入门教程(三)属性标签的更多相关文章
- WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- 无废话WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- 【转】WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 【转】WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- WCF入门教程(三)定义服务协定--属性标签
WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...
- WCF入门教程(五)配置文件
WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...
- WCF入门教程(二)如何创建WCF服务
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...
- WCF入门教程(二)从零做起
通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...
- WCF入门教程(二)从零做起-创建WCF服务
通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...
随机推荐
- STL六大组件之——分配器(内存分配,好深奥的东西)
SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器:当配置区小于1 ...
- Asp.net MVC4 使用EF实现数据库的增删改查
EF的使用 步骤: (1)将EF添加到项目:在Model右击添加新建项 找到ADO.NET实体数据模型,接着... (2)实现数据库的增删改查 查询 (因为在Model中已经添加EF实体了 ...
- Python 学习笔记(六)正则扩展标记
1. (?:...) 不想保存括号里匹配项时使用 The (?:...) notation should be fairly popular; with it, you can groupparts ...
- html5的一些表单属性
IE8及以下不能很好支持这些属性 <pre>input属性: placeholder:输入框的默认值,向用户显示描述性说明文字或者提示信息 autocomplete:值为on和off..o ...
- url(data:image/png;base64,R0**)(转)
url(data:image/png;base64,R0**) 所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在 ...
- Python中list的实现
原文链接这篇文章介绍了Python中list是如何实现的.在Python中list特别有用.让我们来看下list的内部是如何实现的.来看下面简单的程序,在list中添加一些整数并将他们打印出来. &g ...
- 打造自己的Markdown编辑器
原文链接: http://www.errdev.com/post/5/ Markdown以其简洁的语法赢得了广大程序猿的喜爱,搜了一下github上相关的web编辑器,星星比较多的 Stackedi ...
- Strom学习笔记一
---恢复内容开始--- Storm 是个实时的.分布式以及具备高容错的计算系统.同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时:也 ...
- Java WEB —— Java提升
Java 5.0新特性: 枚举: enum Grade{ --> 相当于类 A("80~100"),B("70~80"),C("60~70&qu ...
- SvUDID实现设备唯一标示
//SvUDIDTools : https://github.com/smileEvday/SvUDID //将生成的UDID保存到钥匙串中,用户卸载app再重新安装UDID也不会改变. /* 用法1 ...