WCF 學習(1)
在DataContractOrder中没有必要为DataContractProduct添加KnownType,只要DataContractProduct为数据契约,序列化就没有问题。KnownType一般应用在数据契约的继承体系上。如果要使用多态的方式去实例化数据契约对象时,就必须在父类上将子类标记为KnownType,例如: [DataContract] [KnownType(typeof(SepecialOrder))] public class Order{}
[DataContract] public class SepcialOrder:Order{}
由于添加了KnownType,以下的代码才能够运行: Order order = new SpecialOrder();
如果没有KnownType,则上述代码虽然能够通过编译,但在运行时却会失败。
用XMLSerializer进程Deserialization,会调用的默认(无参)构造函数来初始化对象 XML中的Namespace必须要和你的Class定义相匹配才能实现反序列化 因为WCF需要序列化,必须知道“具体”的类型,List<object>,对于object, WCF根本就不知道具体是什么类型,所以无法序列化,换成具体的类型
Encoding由于和Binding紧密结合,所以在Binding configutation Section中进行配置。 <binding name=”myNetTcpBindingConfiguration”> <textMessageEncoding/> or <binaryMessageEncoding/>or <mtomMessageEncoding/> </binding> 如果我没有记错的话,Http based Binding默认使用binaryMessageEncoding,Tcp based Binding默认使用textMessageEncoding
Service Contract定义了包含了所有Operation的Service的接口, Data Contract定义了交互的数据的结构, FaultContract实际上定义需要再双方之间进行交互的了异常、错误的表示 在WCF中,我们一般用两个不同的Serializer实现Object和XML的Serialization和Deserialization:Datacontract Serializer和XML Serializer。而对于Fault,只能使用前者 Microsoft Soap Toolkit中的Soap Trace Utility和tcpTrace 先把Soap发送给tcpTrace,tcpTrace进行Soap trace之后再把Soap Message传到真正的Service。就需要一个特殊的Client端的Endpoint Behavior:ClientViaBehavior
WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: Request/Reply,Request/Forget(One-way)和Duplex Transport:WCF 经常使用的是以下4个:Http,TCP,Named Pipe,MSMQ
Server端建立一个Message Queue来接收来个客户的订单,客户端通过向该Message Queue发送承载了订单数据的Message实现订单的递交。如果在客户离线的情况下,他仍然可以通过客户端程序进行订单递交的操作,存储着订单数据的Message会被暂时保存在本地的Message Queue中,一旦客户联机,MSMQ将Message从中取出,发送到真正的接收方,而这个动作对于用户的透明的。

浙公网安备 33010602011771号