分享
 
 
 

我们一起学习WCF第五篇数据协定和消息协定

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据。 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定。 数据协定为每个参数或返回类型精确定义为进行交换而序列化哪些数据(将哪些数据转换为xml)摘自MSDN)也就说数据协定是客户端和服务端之间达成的数据协议,相互通信的参数会被序列化然后进行传输。那么我用图来表示为什么用数据协定。

下面用图来说明其几个用处

那么下面我们来看看数据协定的代码实现

1:创建一个协定类

1[DataContract]2publicclassPeople3{4///<summary>5///ID6///</summary>7[DataMember(Name="MID")]8publicstringID {set;get; }9///<summary>10///姓名11///</summary>12[DataMember(Name="MName")]13publicstringName {set;get; }14///<summary>15///序号16///</summary>17[DataMember(Name="MNumber")]18publicstringNumber {set;get; }19///<summary>20///年龄21///</summary>22[DataMember(Name="Mage")]23publicstringAge {set;get; }24}

协定类

2:创建接口

[OperationContract]

People GetPeople(string ID);

3:实现接口

1publicclassService:IService2{3publicPeople GetPeople(stringID)4{5People pp=newPeople();6pp.ID =Guid.NewGuid().ToString();7pp.Name ="小马";8pp.Age ="22";9pp.Number ="13559846";10returnpp;11}

实现接口

4:服务端同上篇看看效果

5:解释:我们在协定类的属性最后都是按照我们定义的这么一来起着保护类实体的作用。

以上就是我简单理解的数据协定。不足之处请指正

B:消息协定

为什么用消息协定:

您可能希望使用单个类型来表示整个消息。 虽然可将数据协定用于此目的,但建议使用消息协定来执行此操作,这可以避免在得到的 XML 中采用不必要的包装级别。 此外,使用消息协定可以对得到的消息进行更多的控制。 例如,您可以决定哪些信息段应包含在消息正文中,哪些信息段应包含在消息头中

从图中我们可以看出消息协定比数据协定对信息更加容易控制。

那么我们来用代码表示一下

1:首先我们定义一个头消息(专门用于检测用户登录信息)

1[MessageContract]2publicclassCheckInfo3{4///<summary>5///用户名6///</summary>7[MessageHeader]8publicstringUserName {set;get; }9///<summary>10///密码11///</summary>12[MessageHeader]13publicstringPwd {set;get; }14}

验证类

2:开始定义正文信息(用户信息)

1[MessageContract]2publicclassUserInfo3{4[MessageBodyMember]5publicstringRealName {set;get; }6[MessageBodyMember]7publicstringAge {set;get; }8[MessageBodyMember]9publicDetails Udetails {set;get; }

正文类

3:做完这些之后我们就去实现这些代码(首先进行在头消息进行验证)

publicUserInfo RetUserInfo(CheckInfo cki)

{

UserInfo uf=newUserInfo();if(cki.UserName =="admin")

{if(cki.Pwd =="123456")

{

Console.WriteLine(cki.UserName+":登录成功{0}", DateTime.Now);

uf=GetUserInfo();

}

}else{

Console.WriteLine(cki.UserName+":登录失败{0}",DateTime.Now);

}returnuf;

}

部分源码

4:启动服务客户端进行引用

注意: 作为操作协定的输入消息协定(参数)封装了操作方法的所有in参数;作为操作协定的返回值的消息协定(return)封装了out参数和返回值。

也就是说输入的参数是in类型(把输入类进行肢解)返回时out类型具体参考源码

5:效果截图

服务端

客户端:

源码下载

好了就讲这么多了。欢迎指正

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有