什么是契约?
从SOA概念上将,契约数据服务公开接口的一部分。一个服务契约,定义了服务端公开的服务方法,使用传输协议,可访问地址,传输的消息格式等内容。
就是:乌龟的屁股(规定),没有规矩不成方圆,你总要规定一下你的数据传输格式,以及怎么传输的。但是规定不需要我们写,我们需要知道的就是:我们在什么时候用什么规定就好了。
契约的分类
1.服务契约
它主要定义是:你要提供的一些操作,在wcf中你在类和方法中添加了服务契约,你的方法就能被外界调用。
ServiceContract用在类或是接口上,表示此类可以通过WCF被客户端调用。
OperationContract用在类的方法中,表示此方法可以通过WCF被客户端调用。
例子如下:
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public interface IUpdateService
{
/// <summary>
/// 将记录更新到服务器
/// </summary>
/// <param name="user_name">用户名</param>
/// <param name="table">记录</param>
[OperationContract]
void UpdataToColudData(string user_name, DataTable table);
}
2.数据契约
DataContract用于类或结构上,而DataMember则是用在类或者结构的属性或者字段上。
例子如下:
[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; }
}
}
我们常用的就是服务契约和数据契约了,还有两种就是消息契约和错误契约。
3.消息契约
Message Contract
简单的说,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。
4.错误契约
FaultContract
用于定义自定义错误异常的处理方式,默认情况下,当服务器抛出异常的时候,客户端能接收到异常的信息额描述,但是描述的格式往往很单一,很难为用户处理异常提供有效信息,这个时候,我们就可以通过这个契约,在方法上添加一个错误消息的类,然后在要处理异常的函数上加上一个FaultContract,并将异常信息指示返回为自定义格式。
总结
上边貌似说了一堆相对比较繁琐的东西,其实契约使用起来很简单,它就是在我们常用的类或是方法上边打了一个标记,表示这个类或方法可以被外界(添加服务引用的程序)调用。所以它难不难,你用一下就知道了!