WCF契约及其编程

原创 2015年11月17日 17:24:14

接口

}  定义一个接口是为了遵循同一种规范,便于程序的扩展。

}  关键字

◦      Interface

◦      public

◦      abstract

理解契约式编程

 

}  契约合同能保障双方的利益,对客户来说,合同规定了供应者要做的工作;对供应者来说,合同说明了如果约定的条件不满足,供应者没有义务一定要完成规定的任务。该道理同样也适用于软件. 所以,契约式编程是编程的一种方法。

}  引入契约观念之后,这种Client 与 Server 关系被打破,大家都是平等的,你需要我正确提供服务,那么你必须满足我提出的条件,否则我没有义务“排除万难”地保证完成任务。

 

 

 

服务契约

}  服务契约描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceModel 。

}  ServiceContractAttribute

}  OperationContractAttribute

 

 

数据契约

}  大部分的系统都是以数据为中心的(Data Central),数据是信息的载体,一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结构的一致性理解。这就为数据的表现提出了要求,为了保证处于不同平台、不同厂商的应用能够正常地进行数据交换,交换的数据必须采用一种大家都能够理解的展现方式。在这方面,XML无疑是最好的选择。所以WCF下的序列化(Serialization)解决的就是如何将数据从对象的表现形式转变成XML表现形式,以确保数据的正常交换。

}  DataContractAttribute和DataMemberAttribute

}  对于应用了DataContractAttribute特性的类型,只有应用了DataMemberAttribute特性的字段或者属性成员才能成为数据契约的数据成员。

 

 

}  DataContractSerializer能自动序列化任何实现了System.Runtime.Serialization.ISerializable接口的.NET类型。

}  通过使用DataContract和DataMember特性,可以非常简单地让WCF的DataContractSerializer将开发者定制的数据类型序列化。

}  WCF对DataContractSerializer的调用被隐藏起来了.

 

例子:用控制台输出的方式进行讲解(该序列化过程是隐藏起来的)

namespace ConsoleApplication1

{

    [DataContract]

    classbook

    {

        privateint bookID;

        [DataMember]

        publicint BookID

        {

            get;

            set;

        }

        privatestring bookName;

        [DataMember]

        publicstring BookName

        {

            get;

            set;

        }

        privatedouble price;

        [DataMember]

        publicdouble Price

        {

            get;

            set;

        }

    }

    classProgram

    {

        staticvoid Main(string[]args)

        {

            DataContractSerializerserializer = new DataContractSerializer(typeof(book));

            MemoryStreamms = new MemoryStream();

            bookb=new book();

            b.BookID=1001;

            b.BookName="<wcf进阶>";

            b.Price=50.5;

           serializer.WriteObject(ms,b); //序列化

            //serializer.ReadObject();//反序列化

            Console.WriteLine(UnicodeEncoding.UTF8.GetChars(ms.ToArray()));

            Console.ReadKey();

        }

    }

}

 

 

消息契约消息契约用来控制消息头,和消息体; 当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体。

}  MessageContractAttribute

}  MessageHeaderAttribute

}  MessageBodyMemberAttribute

 

[MessageContract]

    publicclass uploadFile

    {

        [MessageHeader]

        publicstring FileName

          { get;set;}

 

        [MessageHeader]

        publicint length

        { get;set; }

 

        [MessageBodyMember]

        publicbyte[] getContent

        { get;set; }

    }

复杂一些的消息契约:

    [MessageContract]

    publicclass order

    {

        [MessageHeader]

        publicstring OrderID

        { get;set; }

 

        [MessageHeader]

        publicDateTime Date

        { get;set; }

 

        [MessageBodyMember]

        publicorderDetails Detail;

       

    }

 

    [CollectionDataContract]

    publicclass orderDetails: List<orderDetails>

    { }

 

     [DataContract]

    publicclass orderDetail

    {

         [DataMember]

        publicstring productID

        {

            get;

            set;

        }

        [DataMember]

        publicint Quantity

        {

            get;

            set;

        }

    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

WCF契约之---服务契约 、数据契约、 消息契约

服务契约 描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceMod...
  • Percy__Lee
  • Percy__Lee
  • 2015年09月17日 13:59
  • 1406

WCF契约的简单介绍(服务契约 数据契约 消息契约)

本篇博文只是简单说下WCF中的契约的种类、作用以及一些简单的代码示例。在WCF中契约分为服务契约、数据契约和消息契约。下面对这几种契约进行简单的介绍。 服务契约 服务契约描述了暴露给外部的...
  • qq452626100
  • qq452626100
  • 2016年08月15日 16:51
  • 732

WCF 简单架构(一) 契约和客户端

WCF 通用契约定义用于所有交互的调用的基接口。 其中WcfRequest和WcfResponse 作为输入输出参数的封装 [ServiceContract] public inter...
  • mqmmx
  • mqmmx
  • 2016年10月10日 16:14
  • 591

WCF系列博文(二)-----WCF组成与核心

上一篇博文主要是介绍软件开发过程中WCF给系统带来的好处,帮助刚开始接触WCF框架的程序员理解WCF框架,打消心中的疑问。而本文主要介绍一个WCF框架组成与通信三要素。      WCF框架组成...
  • u010011371
  • u010011371
  • 2015年08月12日 16:26
  • 821

消费者驱动的微服务契约测试套件:Spring Cloud Contract

在微服务架构下,你的服务可能由不同的团队提供和维护,在这种情况下,接口的开发和维护可能会带来一些问题,比如服务端调整架构或接口调整而对消费者不透明,导致接口调用失败。 为解决这些问题,Ian R...
  • j3T9Z7H
  • j3T9Z7H
  • 2017年11月21日 00:00
  • 486

WCF流与文件传输、数据契约和消息契约

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • smartsmile2012
  • smartsmile2012
  • 2017年05月22日 16:19
  • 262

WCF契约的简介(服务契约、数据契约和消息契约)

本篇博文只是简单说下WCF中的契约的种类、作用以及一些简单的代码示例。在WCF中契约分为服务契约、数据契约和消息契约。下面对这几种契约进行简单的介绍。 服务契约 服务契约描述了暴露给外部的类型(接...
  • XueminXu
  • XueminXu
  • 2013年09月27日 15:22
  • 479

WCF之契约的分类

上篇博客我们谈到了契约,今天我们从契约开始。那么什么是契约呢?在使用WCF时,对其制定各种各样的规则,就叫做WCF契约。任何一个分布式的应用程序在传递消息的时候都需要实现制定一个规则。     任何...
  • gaibian0823
  • gaibian0823
  • 2015年02月16日 15:30
  • 1200

WCF学习(二):契约

(原创:灰灰虫的家http://hi.baidu.com/grayworm) 契约是WCF中很重要的概念。它是用一种与平台无关的标准语法来描述WCF服务的功能。当客户端获取服务端WCF服务的时候,会...
  • liuwei1128
  • liuwei1128
  • 2014年03月14日 21:38
  • 538

(三)WCF之契约

自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解)。之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约...
  • u013038643
  • u013038643
  • 2016年01月17日 16:51
  • 640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WCF契约及其编程
举报原因:
原因补充:

(最多只允许输入30个字)