版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1概念Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发 接口,可以翻译为 Windows通讯接口。它是.NET框架的一部分,由.NET Framework 3.0开始引入。WCF的终结点有三个要素组成,分别是地址( Address )、绑定(Binding )和契约(Contract),简记可写成 Endpoint = ABC。地址:地址决定了服务的位置,解决了服务寻址的问题。绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。绑定的类型包括BasicHttpB in di ng、
2、WsHttpBi ndi ng、NetTcpBi nding 等。契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。2.契约WCF的基本概念是以契约(Contract)来定义双方沟通的协议,契约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。契约分成了四种:数据契约(Data Contract),订定双方沟通时的数据格式。服务契约(Service Contract),订定服务的定义。操作 契约(Operatio n Con tract),订定服务提供的方法。消息契约(Message Contract),订定在通信期间改写消息内容的规范。如下图,解释了
3、契约:“注意!便用嗟忙菜单上的“宝命名會命.可以同时更改ft码和配置文件中的接口名IServical*1竺仝三汎_; + 用油胸口対*昇蝕勺public inte-rface -iI(IpcFpt onContrscT.striri GetDatafint i-alueI, coup- : i i e) H(r:r |n : -: i tlT-1 ;j 仙匸我卜iig;)9Tr()rn r -i (厂 1-; .- : iQp* rat LouCoti irac i string tdClorVanie .c&Iot-l n i .一. Gf Service Calc 11 .T t. : i
4、. : J public class便用下荷示険F EE T-:-. - - ._俗臭合类型添为到服务操作lp0SilcTy 记虫祐龛域11BEtool boolYalue = true,erring strin&Value - *kello|iyaMeberJ 砌聊宦俺腳麻fubli: bool 5wlValueget rttum boolVnle:ser I boo lvalue = 记!就,:3绑定由于 WCF 支持了 HTTP , TCP , Named Pipe , MSMQ , Peer-To-Peer TCP 等协议, 而HTTP 又分为基本 HTTP 支持(BasicHttpB
5、inding)以及 WS-HTTP 支持(WsHttpB in di ng),而 TCP 亦支持 NetT cpBi ndi ng , NetPeerTcpBi ndi ng 等通信方式,因 此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。基本绑定(BasicHttpBinding)对应BasicHttpB in di ng 类,能够将 WCF服务公开为传统的 ASMX Web服务,是以前就的程序能够使用现在的 WCF服务。在实际开发中一个WCF服务可能会给不同的程序调用,如给Java的程序调用,给 Flex的程序调用等,那么采用BasicHttpBinding 最合适不过了
6、TCP 绑定(NetTcpBinding) 对应与NetTcpB in di ng类,TCP绑定使用TCP协议在Intranet中跨机器的通信,注意这里是Intranet而非In ternet。支持多种特性,包括可靠性、事务性、安全性、以及WCF之间通信的优化。前提是要求客户端与服务端都必须使用WCF4程序设计第一步:wcf服务端新建一个“windows窗体程序”名称为WCFHostServer,然后添加一个“WCF服务”名称为Servicel给窗体取名为FormService,然后在窗体的Load事件中编写代码启动wcf服务:NetTcpB in di ng 方式启动 wcf服务和Basic
7、HttpB in di ng 方式启动 wcf服务1. ServiceHost m_ServiceHost;1.csharp view plaincopyprint?private void Form1_Load( object sender, EventArgs e)2.3./NetTcpBinding方式启动wcf服务4.m_ServiceHost的类名称=new ServiceHost( typeof (Service1); /Service1 是 wcf 服务5.NetTcpBindingbinding = new NetTcpBinding。;6.Uri baseAddress=ne
8、w Uri( string .Format( net.tcp:/localhost:10086/WCFH7.ostServer/Service1 );m_ServiceHost.AddServiceEndpoint(typeof (IService1),binding, baseAddres8.9.s);/BasicHttpBindingServiceMetadataBehavior方式启动wcf服务metadataBehavior;3.14.15.metadataBehavior = m_ServiceHost.Description.Behaviors.Find();i
9、f (metadataBehavior= null )metadataBehavior = new ServiceMetadataBehavior。; metadataBehavior.HttpGetEnabled= true ;metadataBehavior.HttpGetUrl= new Uri( string .Format( http:/localhost:10085/WCFHostServer/Service1);16. m_ServiceHost.Description.Behaviors.Add(metadataBehavior);17. 18. m_ServiceHost.O
10、pen();19. 在窗体的Closeing中编写服务退出代码csharp view plaincopyprint?1. private void FormService_FormClosing( object sender, FormClosingEventArgs e)2. 3.if(m_ServiceHost!= null )4.5.m_ServiceHost.Close();6.m_ServiceHost = null ;7.在 IService1.cs 中增加一个方法 GetSvrTime-namespace CFHost ServerI/注意:使用重构菜单上的 憧命名命令Ser1j
11、 e :iit j 3匚-public interface IS&T5ricc.QperationContract void DoWork ();Cper at ionl orit r act st ring Gmt: SvrTime|():在Service1.cs中实现接口的方法 GetSvrTime,获取服务器时间 namespace WCFHostServer/注意:便用“重构”菜单上的“重命名命督,可咲public class Service 1 : IService1I Ipublic void DoWork t)|public string GetSvrTijneOreturn i
12、)at cirLC.Waw- ToStrinO :第二步:WCF客户端 新建一个 windows窗体程序命名为 WCFHostClient,在Debug中运行 WCFHostServer窗体(这一步很重要),然后在项目 WCFHostClient中右键-添加服务引用”,在地址填入以BasicHttpBinding 绑定方式启动wcf服务的地址http:/localhost:10085/WCFHostServer/Service1 ,点击前往”然后连接上后点击 确定” 在 WCFHostClient 项目中就会增加一个 Service References (ServiceReferencel
13、)将窗体命名为 FormClient.cs,在窗体上增加两个textbox(ip为textbox1 ,port为textbox2)和一个 button,如下图:在butt on中增加wcf客户端连接 wcf服务端的代码csharp view plaincopyprint?1. private2. 3.4.void button1_Click_1(/basicHttpBindingService1Clientobject sender, EventArgs e)绑定方式的通讯单工host = new ServiceReference1.Service1Client();5.的时间string h
14、time = host.GetSvrTime(); / 调用 GetSvrTime 获取到 wcf 服务器上6. MessageBox.Show( basicHttpBinding + + htime);7.7. /NetTcpBinding绑定方式的通讯双工8. IService1 m_Innerclient;9. ChannelFactorym_ChannelFactory;10. NetTcpBinding binding= new NetTcpBinding();11. Uri baseAddress = new Uri( string .Format( net.tcp:/0:1/WC
15、FHos tServer/Service1 ,textBox1.Text, textBox2.Text);12. m_ChannelFactory= new ChannelFactory(binding, new EndpointAddress(baseAddress);13. m_Innerclient = m_ChannelFactory.CreateChannel();14. string htime1=m_Innerclient.GetSvrTime();/ 调用 GetSvrTime 获取到wcf服务器上的时间15. MessageBox.Show( NetTcpBinding +
16、+ htime1);16. 上面的代码是客户端调用服务端提供的接口GetSvrTime来通讯的,那么服务端如果发生了一个事件想主动通知客户端,又不可能反向调用客户端提供的接口,这时候就需要使用 回调的方式进行 wcf通讯了,也就是说服务端定义一个回调,客户端注册这个回调,然后 就可以在这个回调里等待服务端的信息通知了第三步:服务端回调通知客户端信息wcf 服务端 WCFHostServer 步骤1. 在 IService1.cs 中增加一个回调接口ISvrToCliCallBack,增加方法 NotifyClientMsg,设置该方法为单向,如图:上 najRcspce VCFHtrSt Se
17、rver/注意:使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的1 / rServiceCorLt r act 1public interface IServj z?; OperationContract void D理ork ();OperationContractvoid GetSvrTijue 0 ;public interface ISvtToCl iC illE iikvoid HotifyClierrtflsgrliij devtai:elnf ):CiDej- 1 : - ;口曰门已Wrlt J-工I :2.Service1.cs中在客户端调用方法 GetSvr
18、Time的时候获取ISvrT oCIiCallBack的实例H ServiceBehavior (Ins- Inst anceContextlflode.PerCall ConcurrencyMode = Copublic class Service 1 : IScrvice 1pubJLil匚 void JTofforKVrvoid GetSvrTinie(ji.“訂厂;.-J CurrentGmt al lb: k0 :/ret urn Date Time, Now. ToSt ring ();注意:使用OperationContext.Current来获取当前客户端操作的实例只有在客户端
19、调用服务端提供的接口的时候才能有效,否则为 NULL所以 OperationContext.Current.GetCallbackChannel必须在 GetSvrTime 里实现3.在FormServer窗体上增加一个按钮,点击该按钮实现通知客户端的功能在butt on增加下面代码csharp view plaincopyprint?1. private void button1_Click( object sender, EventArgs e)2. 3. Service1.userCallBack.NotifyClientMsg(服务端给客户端通知啦 ”);4. 调用NotifyClie
20、ntMsg 通知客户端wcf 客户端 WCFHostClient 步骤:1.在Debug目录中开启WCFHostServer.exe ,客户端在ServiceReference1更新服务引用2. 在 FormClient 中继承接口 IService1Callback ,实现方法 NotifyClientMsg也就是说,当服务端有信息通知的时候(点击 FromServer上面的通知客户端”按钮)客户 端的这个方法就会激活3.在FormClient_Load 中使用双工绑定方式 NetTcpBinding来连接wcf服务(注:不能使 用单工方式 basicHttpBinding )csharp view plaincopyprint?1. IService1m_lnnerclient;private void FrmClierrt Load(object sender, :-r :;2.rjs e)N航TcpEitidiii绚定方式的通讯双工I 二” : ,ce( :jr m CallBackCont ex丈:ni_C al IB ackC ont e zt = nev ?Li (this):J Fi二 h-ami e LF a匚丈工芯:.m r i : i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川创锦发展控股集团有限公司招聘项目负责人的1人备考题库附答案详解(a卷)
- 2026陕西省定向延安“优师计划地方专项”师范毕业生招聘备考题库(30人)附答案详解(满分必刷)
- 2026安徽马鞍山市教育系统部分中小学校园招聘20人备考题库(南京师范大学考点)及参考答案详解一套
- 2026四川凉山州会理市公安局考试招聘工作人员30人备考题库附答案详解(b卷)
- 2026辽宁铁岭市教育局校园招聘143人备考题库含答案详解(能力提升)
- 海信集团2026届全球校园招聘备考题库及答案详解(易错题)
- 2026海南三亚市天涯区教育系统赴高校面向应届毕业生招聘教师60人备考题库(第1号)及答案详解一套
- 2026安徽黄山市黄山区招引急需紧缺教育储备人才12人备考题库带答案详解(完整版)
- 2026浙江宁波东方海纳人力资源服务有限公司招聘6人备考题库含答案详解(a卷)
- 2026年琼中教师招聘25人备考题库含答案详解(典型题)
- 2026年台州临海市粮食收储有限公司招聘工作人员5人建设笔试备考题库及答案解析
- 2025学年第二学期杭州市高三年级二模教学质量检测英语试卷+答案
- 河北建设投资集团秋招面笔试题及答案
- 2025年医院招聘护理笔试考试题及答案
- T∕CNCA 128-2025 露天煤矿土石方剥离综合单价确定方法
- 西部计划考试考题及答案
- 公交驾驶员服务培训课件
- 第五章儿童消化系统的结构功能及发育
- 沃尔玛管理层绩效评估表
- RB/T 089-2022绿色供应链管理体系要求及使用指南
- 特殊特性与控制方法培训教材吉麦20200103
评论
0/150
提交评论