WCF 之 消息契约(MessageContract)】的更多相关文章

对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息.比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体.比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式.文件大小等.一般的做法是将传输文件内容的流作为SOA…
对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息. 比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体.比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式.文件大小等.一般的做法是将传输文件内容的流作为SO…
我也遇到同样问题,所以抄下做MARK http://www.cnblogs.com/lmjq/archive/2011/07/19/2110319.html 刚做完一个binding为netTcpBinding,transferMode为"Streamed"传输大文件的例子. 现实验用消息契约(Message Contract)来传输文件名等信息. 服务契约(Service Contract)和消息契约(Message Contract)如下: } 运行程序错误,异常提示信息如下: I…
本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或类).服务所支持的操作.使用的消息交换模式和消息的格式.每个WCF服务必须实现至少一个服务契约.使用服务契约必须要引用命名空间System.ServiceModel .服务契约中常用到的三个特性: ServiceContractAttribute 该特性定义在类或接口上,用来描述一个相关操作的集合.…
原文:WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在本篇文章中,我们将讨论WCF四大契约(服务契约.数据契约.消息契约和错误契约)之一的消息契约(Message Contract).服务契约关注于对服务操作的描述,数据契约关注于对于数据结构和格式的描述,而消息契约关注的是类型成员与消息元素的匹配关系. 我们知道只有可序列化的对象才能通…
上一篇:WCF把书读薄(2)——消息交换.服务实例.会话与并发 十二.数据契约 在实际应用当中数据不可能仅仅是以int Add(int num1, int num2)这种简单的几个int的方式进行传输的,而是要封装成相对复杂的Request/Response对象,即用我们自定义的类来进行消息的传输,那么就需要一种规则来序列化/反序列化我们自己的对象成为某种标准格式.WCF可以通过数据契约来完成这一过程,WCF使用的序列化器是DataContractSerializer. 在一个类上打上DataC…
1.最多一个参数和一个返回值,返回值和参数的类型都是消息类型. 下面的代码为定义一个消息契约的实例 [MessageContract]    public class MyMessage    {        private string operation;        private double n1;        private double n2;        private double result; //Constructor - create an empty mess…
一.契约的基本概念 契约是消息参与者之间的约定.在SOA架构中,契约提供了服务通信所必需的元数据.契约用来定义数据类型,操作,消息交换模式和消息交换使用的传输协议.契约通常是在标准化平台中使用与编程语言无关的XML格式发布的.这样做的好处是:允许契约涉及的各方都能够使用和理解契约.在WCF中,服务元数据通常是用WSDL(Web服务描述语言)和XSD(扩展样式定义)文档格式来描述的.在WCF程序中,契约不一定是WSDL和XSD的文档集合,而可能是.NET类型定义的集合,如有需要就可以转化为WSDL…
一.代码案例 首选建立2个WCF Service,它们分别使用不同的Contract,同时创建一个Console控制台项目,作为Client: 其中,WcfServiceWithDataContract项目使用DataContract,具体表现为将实体类标记为[DataContract]: [DataContract] public class BookOrder { [DataMember] public string ISBN { get; set; } [DataMember] publi…
最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作上没用用到.就到园子里面找啊找,翻啊翻,还是给我翻到几篇关于WCF消息队列的教程,其中本次推荐的是:陈希章 写的这篇:在WCF中使用消息队列,本文就在他写的这个WCF的一个基础下,完善一下他忽略到的内容以及详细步骤,在此也非常感谢陈希章的辛苦劳作,让我快捷的接触到了WCF的消息队列,非常感谢.如果有…
WCF采用基于契约的服务调用方法,通过System.ServiceModel.ChannelFactory<TChannel>直接创建服务代理对象. 创建服务代理 public static T Create<T>(string endpointName) { if (string.IsNullOrEmpty(endpointName)) { #region 默认配置,根据类名,赋值endpointName #endregion throw new ArgumentNullExce…
目录 1       大概思路... 1 2       Nginx集群之WCF分布式消息队列... 1 3       MSMQ消息队列... 2 4       编写WCF服务.客户端程序... 2 5       服务器安装MSMQ.. 5 6       部署WCF服务程序到局域网内1台PC机... 6 7       Nginx集群配置搭建... 7 8       运行结果... 8 9       总结... 11 1       大概思路 l  Nginx集群之WCF分布式消息队…
消息契约 在MassTransit中,使用.NET .NET系统定义消息契约.消息可以使用类和接口来定义,但是,建议类型使用只读属性而不使用行为. 注意:强烈建议使用消息接口的接口,基于多年的经验,具有不同级别的开发经验.MassTransit 将为消息创建动态接口实现,确保消息契约与消费者的干净分离. 下面显示了一个更新客户地址的示例消息. namespace Company.Application.Contracts { using System; public interface Upda…
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借助其他工具来抓取数据包来查看.那,有没有办法让程序自己输出相应的SOAP信息呢? 要对SOAP消息进行拦截和修改,我们需要实现两个接口,它们都位于System.ServiceModel.Dispatcher (程序集System.ServiceModel).下面分别价绍. 接口一:IClientMe…
请求/响应:所有操作的默认行为,在WSDL中表现为Input/Output元素. One_Way. 在WSDL中只有Input,没有回应(Output),所以没有异常报告. 单向操作只会在发出调用的瞬间阻塞客户端,但是如果发出了多个单向调用,WCF会把这些调用放入队列,由于队列是有限容量的,过多数量的调用会被阻塞,直到有的请求出列,然后调用入列,才会解除客户端的阻塞. 当要保证消息确实到达时,使用可靠性消息/MSMQ来暂时/长期保证. 其无法维持客户端状态,所以应该是终止会话前的最后一个操作.…
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借助其他工具来抓取数据包来查看.那,有没有办法让程序自己输出相应的SOAP信息呢? 当然有,这就是我们本文要说的,对消息的拦截与篡改,呵,我用了一个不太好听动词——篡改. 由于WCF的模型相对复杂,对于如何拦截和修改消息会让许多刚接触的朋友有点抓狂.是的,虽然MSDN文档都有详细的说明,但估计你也和我…
转载地址:http://www.zhuli8.com/wcf/EnumMember.html 枚举类型的定义总是支持序列化的.当我们定义一个新的枚举时,不必应用DataContract特性,就可以在数据契约中使用它.数据契约隐式地包含了枚举对象的所有值. enum ContactType { Customer, Vendor, Partner } [DataContract] struct Contact { [DataMember] public ContactType ContactType…
一.数据契约 1.使用数据协定可以灵活控制哪些成员应该被客户端识别. [DataContract] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string City { get; set; } } [ServiceContract] public interface IServ…
从抽象层面看,WCF能够托管CLR类型(接口和类)并将它们公开为服务,也能够以本地CLR接口和类的方式使用服务.然而,CLR类型却属于.NET的特定技术.由于面向服务的一个核心原则就是在跨越服务边界时,服务不能够暴露它们的实现技术.因此,不管客户端采用了何种技术,它都能够与服务交互.使用基于XML的样式或信息集(Infoset)实现CLR数据类型与标准的与平台无关的表示形式之间的转换.此外,服务需要一种正式的方法声明两者之间的转换,这就是契约. Serializable所指代的涵义是类型的所有成…
服务契约中的请求-响应操作 1.请求-响应模式 [OperationContract]//1默认就是 请求-相应 Requst- Replay DateTime GetDateTime(); [OperationContract] DataTable GetUserInfo(); 2.单程模式 //2.单程:One-Way 操作不需要服务器给出响应. //即客户端发出消息,并且得到服务端确认后,就理解结束本次操作调用的模式 [OperationContract(IsOneWay=true,Nam…
WCF中传输的数据不想传统的面向对象编程,它只传递了一些对象的属性,但是自身并不知道自己属于什么对象,所以,他没有子类和父类的概念,因而也就没有Is-a的关系,所以在WCF中,如果想维持这种继承关系,就需要做一些特殊的处理了. 假设有如下定义, namespace KnownTypeExampleInterface{    [DataContract]    public class Employee    {        [DataMember]        public string N…
前面几篇讲的都只能传递string类型的简单参数,数据契约就是用来解决如传递一个带有多个属性的Class类型的对象的. WCF推荐使用数据契约的方式实现数据的序列化.这部分的内容很好理解但是很重要,先看[DataContract]和[DataMember]这两个就是数据契约的标记,他们在System.Runtime.Serialization命名空间下. 1.[DataContract]:它用来实现Schema与CLR类型之间的转换.总是要提供命名空间,Web Service的规范要求使用“Sc…
我定义的WCF契约里,有一个类,里面的属性,有一个因为只读,所以只写了个get.结果客户端就报错. [DataContract] public class UserItem { public UserItem(int Id, string Name, bool IsActived) { this.Id = Id; this.Name = Name; this.IsActived = IsActived; } [DataMember] public int Id { get; set; } [Da…
消息队列类型 公共队列:整个网络中的节点都可以访问到 专用队列:本地计算机,知道路径者可以访问 管理队列:包含确认在给定“消息队列”网络中的发送的消息回执的消息 相应队列:返回给发送程序的相应信息…
public override bool Login(string userName, string password) { using (HttpClient client = new HttpClient(URI)) { StringBuilder sb = new StringBuilder(); sb.Append("Login"); Uri uri = new Uri(URI + sb.ToString()); Login lg = new Login(); lg.userN…
1.协议 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace WCFHub.IService { [ServiceContract(CallbackContract=typeof(IEventCallback))] public interface IEventService { [OperationCo…
我们知道,WCF服务端是先定义服务协定,其实就是一个接口,然后通过实现接口来定义服务类.那么,有一个问题,如果一个服务类同时实现N个接口(也就是有N个协定)呢?结果会如何? 不必猜,我们还是通过实验来说明吧. 首先,参照下面代码写好服务器端,代码中,我写了三个协定,然后一个服务类同时实现它们. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Ser…
SOAP SOAP是Simple Object Access Protocol(简单对象访问协议)的简称 而如今SOAP已经成为了符合W3C制定的SOAP规范的消息 允许您使用 XML 在通过低层 Internet 协议连接的系统之间进行通信 它为通过网络消息传输的 XML 信息提供了标准的封套  目前为止W3C一共制定了SOAP1.1和SOAP1.2两个版本的消息规范 对应的命名空间如下 SOAP1.1:http://schemas.xmlsoap.org/soap/envelope SOAP…
WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 MessageContract 异常契约 FaultContract 用于定义服务操作的服务WCF契约:Service Contract 这种级别的契约又包括两种:ServiceContract和OperationContract ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调…
WCF的简单 WCF的学习之旅 一.WCF的简单介绍  Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是MS为SOA (Service  Oriented Architecture)战略而设计的一套完整的技术框架.它是一种统一的编程模型,用来为微软平台编写分布式(Distributed)应用.涵盖了之前出现的多种技术,如ASMX,Remoting,MSMQ等等. 优点: 1.整合了多项技…