WCF学习-Contracts介绍

     说起Contracts,我们大家都能想到它的中文意思,没错,“合同,契约”。那我们搬出它来做什么呢?WCF是一种技术架构,支持跨平台,跨语言,跨域等多种复杂环境。这种情况就不得不要求我们做出一种规范,来实现上述目的。而这种规范就是所谓的“契约”。

     我们先说说契约的种类:ServiceContract, DataConstract, FaultContract, MessageContract.

     下面分别介绍一下各个契约的含义以及如何使用:

     ServiceContract即所谓的“服务契约”,它是用来定义一系列服务的操作的契约。通常被用在Interface上。该接口中定义了一系列可供客户端调用的方法,在这些方法上我们还需要声明为“OperationContract”. 这就代表,该方法是可以被客户端调用到的。OperationContract可以声明在interface中的方法上,也可以声明在Class的方法上,但该class必须继承于声明为ServiceContract的interface.如:

    

ContractedBlock.gif ExpandedBlockStart.gif Code
[ServiceContract]
interface IService
{
  [OperationContract]
  SqlResult
<People> GetPeople(string ID);

  [OperationContract]
  
void NotifyPeople(string ID);
}

 

     DataContract即“数据契约”,是用来定义客户端与WCF服务之间进行数据交换的数据格式。datacontract中定义了需要交换的数据都有哪些,但也不是说datacontract中定义的property就全部是需要交换的数据,只有被声明为DataMemeber的property才会被认为是需要交换的数据。如:

     

ContractedBlock.gif ExpandedBlockStart.gif Code
[DataContract]
public class People
{
 [DataMemeber]
 
public string Name
 {
   
get;
   
set;
 }
 
 [DataMemeber]
 
public string Sex
 {
   
get;
   
set;
 }

 
//没有标示DataMemeber Attribute,所以此property不会被serilized到jsonstring中
 public sring Temp
 {
   
get;
   
set;
 }
}

 

     FaultContract即“错误契约”,是用来定义当WCF服务中执行的操作出现异常时抛出的错误信息处理方式,FaultContract通常定义在服务契约中声明的方法上面,一般和OperationContact一起使用,来说明当此方法中抛出异常时所传会客户端的信息格式。如:

     

ContractedBlock.gif ExpandedBlockStart.gif Code
[ServiceContract]
interface IService
{
[OperationContract]
[FaultContract(
typeof(ApplicationException))]
string something(int a);
}

 

     Message Contract即“消息契约”,可以用来定义客户端与WCF服务之间进行消息传递时所使用的信息格式,包括消息头和消息体,还可以指示是否对消息进行加密。如:     

ContractedBlock.gif ExpandedBlockStart.gif Code
[MessageContract]
public class PatientRecord
{
   [MessageHeader(ProtectionLevel
=None)] public int recordID;
   [MessageHeader(ProtectionLevel
=Sign)] public string patientName;
   [MessageHeader(ProtectionLevel
=EncryptAndSign)] public string SSN;
   [MessageBodyMember(ProtectionLevel
=None)] public string comments;
   [MessageBodyMember(ProtectionLevel
=Sign)] public string diagnosis;
   [MessageBodyMember(ProtectionLevel
=EncryptAndSign)] public string medicalHistory;
}

 

通过以上的介绍,其实ServiceContract与OperationContract标记就像是WebService中的WebService和WebMethod标记,

 

ContractedBlock.gif ExpandedBlockStart.gif Code
[WebService]
public class PeopleInfo
{
  [WebMethod]
  
public SqlResult<People> GetPeopleInfo(string ID)
  {
    
//..
  }
}
大家可以对比一下:
[ServiceContract]
interface IPeople
{
  [OperationContract]
  SqlResult
<People> GetPeopleInfo(string ID);
}

 

     

转载于:https://www.cnblogs.com/yanghuaizhi1982/articles/1352091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值