您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 构建WCF面向服务的应用程序
构建WCF面向服务的应用程序主讲人:李平WCF概念WCF是构建和运行ConnectedSystem的一些技术的总称,它是建立在WebServiceArchitecture上的一个全新的CommunicationInfrastructure。WCF为我们提供了Secure&Reliable的Messaging,也为我们提供了更好的Interoperability是的我们可以和其他的平台进行互操作。我们熟悉的技术包括EnterpriseService,.NETRemoting,XMLWebService,WSE,MSMQ等等,将不同的DistributedTechnology整合起来,提供一个统一的ProgrammingModel是绝对有必要的,WCF就是基于这样的一个目的发展起来的。WCF在对这些技术进行整合的时候,始终有一个指导方针,那就是SOA。1.创建一个简单的WCF程序Contract:Interface接口,用来保存Contract(ServiceContact、MessageContract、DataContract),之所以把Contract独立出来的原因是考虑到他同时被Server端——Service本身和ServiceHosting和Client端使用。Service:Service的业务逻辑,继承Contract。Hosting:用于以Self-Hosting的方式HostService。Client:用以模拟现实中的调用Service的Client。:用于模拟如何把ServiceHost到IIS中DEMO2.EndpointOverviewAddress:Address通过一个URI唯一地标识一个Endpoint;Binding:Binding实现在Client和Service通信的所有底层细节;Contract:Contract的主要的作用是暴露某个WCFService所提供的所有有效的Functionality;Behavior:Behavior的主要作用是定制Endpoint在运行时的一些必要的Behavior3.在WCF中实现双向通信(Bi-directionalCommunication)注意:并发模式ConcurrencyMode设置为ConcurencyMode.Reentrant或者ConcurencyMode.Multiple;死锁(DeadLock)——CalculatorService必须等Callback操作完成之后才能执行后续的操作,而Callback操作必须等待InstanceContext被解锁(Unlock)才能执行,然而InstanceContext却被CalculatorService锁住。DEMO4.WCF中的序列化(Serialization)Serialization可以看成是把包含相同内容的数据从一种结构(.NETObject)转换成另一种结构(XML)。如何通信?.NETObject通过Serialization转化成XMLInfoset。但是要使我们的数据能够通过网络协议在网络上传递,必须把生成的XMLInfoset转化成字节流(ByteStream)。在WCF中,我们有3种不同的SerializerDataContractSerializerXMLSerializerNetDataContractSerializerDEMO5.面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现ServiceContract的重载(Overloading)1)传统的XMLWebService,Overloading是不被支持的。2)要Overloading在WCF中可以使用,WCF必须提供这样的一个Mapping——是被重载的具有相同方法的的方法Mapping到不同的Operation上。而提供着一个功能的就是ServiceContract。DEMO6.WCF中的Session和InstancingManagement1)在WCF中,Session属于ServiceContract的范畴,是一个相对抽象的概念,并在ServiceContract定义中通过SessionModel参数来实现。.Session的创建和结束都有来自Client端的调用来实现.WCF保证处于某个Session中传递的Message按照他发送的次序被接收.WCF并没有为Session的支持而保存相关的状态数据。2)ASP.NET中的Session.ASP.NET的Session总是在Server端初始化的。.ASP.NET并不提供OrderedMessageDelivery的担保。.ASP.NET是通过在Server以某种方式保存State来实现对Session的支持的,比如保存在WebServer的内存中,保存在StateServer甚至是SQLServer中Session的表现体现在以下两种方式:1)Session的周期和Proxy的周期绑定,这种方式体现为默认的Session支持。2)Session的周期绑定到开始和终止Session的方法调用之间的时间内,这种方式体现在我们在定义OperationContract时通过IsInitiating和IsTerminating显式指定开始和终止Session的Operatoin。ICommunicationObject对象和System.ServiceModel.ClientBase对象Close()方法真正的逻辑实现是通过调用真正的Serviceinstance中,WCF不仅仅创建对应的ServiceInstance,而且还构建相关的Context,我们把这些统称为InstanceContext。在WCF中,支持以下3中不同级别的InstanceContextMode:1)PerCall:WCF为每个Serivce调用创建一个ServiceInstance,调用完成后回收该Instance。2)PerSession:在Session期间的所有Service调用绑定到某一个ServiceInstance,Session被终止后,ServiceInstance被回收.WCF的默认的InstanceContextMode为PerSession3)Singleton:这种方式和Remoting的Singelton相似。在整个过程中值创建一个ServiceInstanceDEMObasicHttpBinding是不支持Session默认的Session起作用,默认为perSession采用PerCall的InstanceContextMode,Proxy的状态是不可能被保留的7.使用MSMQ进行ReliableMessaging为什么要使用MSMQ?1)MSMQ是基于Disconnection,Message会被暂时保存在本地的MessageQueue中2)MSMQ天生是One-way、异步的,对于发送请求,Server端无需立即响应3)MSMQ能够提供高质量的ReliableMessaging,超时机制(Timeout),确认机制(Acknowledgement),日志机制(Journaling)MSMQ在WCF的运用NetMsmqBinding:它提供的是基于MSMQ的ReliableMessagingMsmqIntegrationBindingDEMO另外,MSMQ天生就具有异步的特性,它只能以One-way的MEP(MessageExchangePattern)进行通信。Client和Service之间采用One-wayMEP的话就意味着Client调用Service之后立即返回,它无法获得Service的执行结果,也无法捕捉Service运行的Exception解决方案是:在每个ClientDomain也创建一个基于MSMQ的本地的WCFService,用于接收来自Order处理端发送的AcknowledgeMessage。对于处理Order的Service来说,在正确处理Order之后,想对应的Client发送AcknowledgeMessage。DEMO本次课程相关文件以及源代码已放入\\192.168.0.100\公司管理\培训课程\构建WCF面向服务的应用程序(ppt,源代码).rar。请大家自行下载!相关WCF文章请查阅谢谢大家!
本文标题:构建WCF面向服务的应用程序
链接地址:https://www.777doc.com/doc-1595956 .html