WCF面向服务应用程序系列之四:契约设计(MessageContract)
2010-10-07 15:50
656 查看
上一章我们介绍了契约设计中的已知类型契约(KnownTypesContract),这一章我们介绍:消息契约(MessageContract)。
消息契约(MessageContract):对控制消息头和消息体元素提供了强力支持,支持MessageHeaderAttribute和MessageBodyMemberAttribute属性。可以添加自定义头,控制消息是否被包装(IsWrapped),以及控制签名与加密(ProtectionLevel)。
开发环境:Visual Studio 2010 + Net Framework 4.0 。
下面通过代码来演示消息契约:
1、新增一个WCF Service Library程序,修改项目名称为MessageContract,删除自动添加的文件。
2、新建Item.cs类,代码如下:
3、添加消息契约类,代码如下:
消息契约用到了:MessageContract、MessageHeader、MessageBodyMember标记。
3、新建WCF接口文件IMessageService.cs,代码如下:
4、新建MessageService.cs类,代码如下:
5、修改App.config中的服务名称 、端点契约、服务地址,代码如下:
代码
至此,WCF契约设计全部介绍完毕,下一章将介绍WCF的契约版本。
点击下载WCF契约设计全部DEMO。
消息契约(MessageContract):对控制消息头和消息体元素提供了强力支持,支持MessageHeaderAttribute和MessageBodyMemberAttribute属性。可以添加自定义头,控制消息是否被包装(IsWrapped),以及控制签名与加密(ProtectionLevel)。
开发环境:Visual Studio 2010 + Net Framework 4.0 。
下面通过代码来演示消息契约:
1、新增一个WCF Service Library程序,修改项目名称为MessageContract,删除自动添加的文件。
2、新建Item.cs类,代码如下:
[DataContract(Name = "ItemContract", Namespace = "http://schemas.xinhaijulan.com/demos/MessageContract")] public class Item { [DataMember(Name = "IdContract", IsRequired = true, Order = 0)] public int Id { get; set; } [DataMember(Name = "NameContract", IsRequired = true, Order = 1)] public string Name { get; set; } [DataMember(Name = "MessageContract", IsRequired = true, Order = 2)] public string Message { get; set; } }
3、添加消息契约类,代码如下:
[MessageContract(IsWrapped = true, ProtectionLevel= ProtectionLevel.EncryptAndSign)] public class SaveRequest { [MessageBodyMember] public Item Item { get; set; } } [MessageContract(IsWrapped = false)] public class SaveResponse { } [MessageContract(IsWrapped=false)] public class GetRequest { [MessageHeader] public string LicenseKey { get; set; } } [MessageContract(IsWrapped = false)] public class GetResponse { public GetResponse() { } public GetResponse(Item item) { this.Item = item; } [MessageBodyMember] public Item Item { get; set; } }
消息契约用到了:MessageContract、MessageHeader、MessageBodyMember标记。
3、新建WCF接口文件IMessageService.cs,代码如下:
[ServiceContract(Name = "MessageContract", Namespace = "http://schemas.xinhaijulan.com/demos/MessageContract")] public interface IMessageService { [OperationContract] SaveResponse SaveItem(SaveRequest requestMessage); [OperationContract] GetResponse GetItem(GetRequest requestMessage); }
4、新建MessageService.cs类,代码如下:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class MessageService : IMessageService { private Item _item; public SaveResponse SaveItem(SaveRequest requestMessage) { this._item = requestMessage.Item; return new SaveResponse(); } public GetResponse GetItem(GetRequest requestMessage) { if (requestMessage.LicenseKey != "xinhaijulan") { throw new FaultException("Invalid license key."); } _item.Message = "MessageService is invoked."; return new GetResponse(_item); } }
5、修改App.config中的服务名称 、端点契约、服务地址,代码如下:
代码
-----------------Test MessageContract Begin----------------- Input exit to close the client, others continue. Please input the id: 456 You have input item.IdContract:456 Please input the name: xinhaijulan You have input item.NameContract:xinhaijulan Get from server item.IdContract is : 456 Get from server item.NameContract is : xinhaijulan Get from server item.MessageContract is : MessageService is invoked. ----------------------------------------------
至此,WCF契约设计全部介绍完毕,下一章将介绍WCF的契约版本。
点击下载WCF契约设计全部DEMO。
作者:心海巨澜 出处:http://xinhaijulan.cnblogs.com 版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- WCF面向服务应用程序系列之二:契约设计(ExplicitContract)
- 【学习】构建WCF面向服务的应用程序系列课程笔记:(2) 契约设计
- WCF面向服务应用程序系列之三:契约设计(KnownTypesContract)
- [导入]构建WCF面向服务的应用程序系列课程(2):WCF契约设计.zip(14.27 MB)
- [导入]构建WCF面向服务的应用程序系列课程(3):契约版本处理.zip(15.79 MB)
- WCF面向服务应用程序系列之七:契约版本管理—服务契约的继承
- 【学习】构建WCF面向服务的应用程序系列课程笔记:(3)契约版本处理
- WCF面向服务应用程序系列之六:契约版本管理—IExtensibleDataObject
- WCF面向服务应用程序系列之五:契约版本管理—版本相容性
- [导入]构建WCF面向服务的应用程序系列课程(7):消息模式.zip(15.48 MB)
- [导入]构建WCF面向服务的应用程序系列课程(6):宿主(Hosting).zip(16.71 MB)
- WCF面向服务应用程序系列之十七:消息交换模式(MEP)-单向操作
- [导入]构建WCF面向服务的应用程序系列课程(5):绑定(Bindings).zip(11.77 MB)
- WCF面向服务应用程序系列之十三:托管(Hosting)-IIS托管
- WCF面向服务应用程序系列之十:绑定-标准绑定(HTTP/TCP)
- [导入]构建WCF面向服务的应用程序系列课程(4):异常与错误处理.zip(13.70 MB)
- WCF面向服务应用程序系列之九:绑定-自定义绑定(CustomBinding)
- WCF面向服务应用程序系列之十六:消息交换模式(MEP)-请求/应答操作
- WCF面向服务应用程序系列之十八:消息交换模式(MEP)-回调操作
- [导入]构建WCF面向服务的应用程序系列课程(15):扩展性.zip(16.75 MB)