版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.概念Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。它是.NET框架的一部分,由 .NET Framework 3.0 开始引入。WCF的终结点有三个要素组成,分别是地址(Address)、绑定(Binding)和契约(Contract),简记可写成Endpoint = ABC。地址:地址决定了服务的位置,解决了服务寻址的问题。绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。绑定的类型包括BasicHttpBinding、WsHttp
2、Binding、NetTcpBinding等。契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。2.契约WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,契约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。契约分成了四种:数据契约(Data Contract),订定双方沟通时的数据格式。服务契约(Service Contract),订定服务的定义。操作契约(Operation Contract),订定服务提供的方法。消息契约(Message Contract),订定在通信期间改写消息内容的规范。如下图,解释了契约:3.绑定由于 W
3、CF 支持了HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。基本绑定(BasicHttpBinding)对应BasicHttpBinding类,能够将WCF服务公开为传统的ASMX Web服务,是以前就的程序能够使用现在的WCF服务。在实际开发中一个W
4、CF服务可能会给不同的程序调用,如给Java的程序调用,给Flex的程序调用等,那么采用BasicHttpBinding最合适不过了TCP绑定(NetTcpBinding)对应与NetTcpBinding类,TCP绑定使用TCP协议在Intranet中跨机器的通信,注意这里是Intranet而非Internet。支持多种特性,包括可靠性、事务性、安全性、以及WCF之间通信的优化。前提是要求客户端与服务端都必须使用WCF4.程序设计第一步:wcf服务端新建一个“windows窗体程序”名称为WCFHostServer,然后添加一个“WCF服务”名称为Service1给窗体取名为FormServi
5、ce,然后在窗体的Load事件中编写代码启动wcf服务:NetTcpBinding方式启动wcf服务和BasicHttpBinding方式启动wcf服务csharpview plaincopyprint?1. ServiceHostm_ServiceHost;csharpview plaincopyprint?1. privatevoidForm1_Load(objectsender,EventArgse)2. 3. /NetTcpBinding方式启动wcf服务4. m_ServiceHost=newServiceHost(typeof(Service1);/Service1是wcf服务的类
6、名称5. NetTcpBindingbinding=newNetTcpBinding();6. UribaseAddress=newUri(string.Format(net.tcp:/localhost:10086/WCFHostServer/Service1);7. m_ServiceHost.AddServiceEndpoint(typeof(IService1),binding,baseAddress);8. /BasicHttpBinding方式启动wcf服务9. ServiceMetadataBehaviormetadataBehavior;10. metadataBehavior
7、=m_ServiceHost.Description.Behaviors.Find();11. if(metadataBehavior=null)12. 13. metadataBehavior=newServiceMetadataBehavior();14. metadataBehavior.HttpGetEnabled=true;15. metadataBehavior.HttpGetUrl=newUri(string.Format(http:/localhost:10085/WCFHostServer/Service1);16. m_ServiceHost.Description.Beh
8、aviors.Add(metadataBehavior);17. 18. m_ServiceHost.Open();19. 在窗体的Closeing中编写服务退出代码csharpview plaincopyprint?1. privatevoidFormService_FormClosing(objectsender,FormClosingEventArgse)2. 3. if(m_ServiceHost!=null)4. 5. m_ServiceHost.Close();6. m_ServiceHost=null;7. 8. 在IService1.cs中增加一个方法GetSvrTime在Se
9、rvice1.cs中实现接口的方法GetSvrTime,获取服务器时间第二步:WCF客户端新建一个“windows窗体程序”命名为WCFHostClient,在Debug中运行WCFHostServer窗体(这一步很重要),然后在项目WCFHostClient中右键-“添加服务引用”,在地址填入以BasicHttpBinding绑定方式启动wcf服务的地址http:/localhost:10085/WCFHostServer/Service1,点击“前往”,然后连接上后点击“确定”,在WCFHostClient项目中就会增加一个Service References(ServiceReferen
10、ce1)将窗体命名为FormClient.cs,在窗体上增加两个textbox(ip为textbox1,port为textbox2)和一个button,如下图:在button中增加wcf客户端连接wcf服务端的代码csharpview plaincopyprint?1. privatevoidbutton1_Click_1(objectsender,EventArgse)2. 3. /basicHttpBinding绑定方式的通讯单工4. Service1Clienthost=newServiceReference1.Service1Client();5. stringhtime=host.G
11、etSvrTime();/调用GetSvrTime获取到wcf服务器上的时间6. MessageBox.Show(basicHttpBinding+htime);7. 8. /NetTcpBinding绑定方式的通讯双工9. IService1m_Innerclient;10. ChannelFactorym_ChannelFactory;11. NetTcpBindingbinding=newNetTcpBinding();12. UribaseAddress=newUri(string.Format(net.tcp:/0:1/WCFHostServer/Service1,textBox1.
12、Text,textBox2.Text);13. m_ChannelFactory=newChannelFactory(binding,newEndpointAddress(baseAddress);14. m_Innerclient=m_ChannelFactory.CreateChannel();15. stringhtime1=m_Innerclient.GetSvrTime();/调用GetSvrTime获取到wcf服务器上的时间16. MessageBox.Show(NetTcpBinding+htime1);17. 上面的代码是客户端调用服务端提供的接口GetSvrTime来通讯的,
13、那么服务端如果发生了一个事件想主动通知客户端,又不可能反向调用客户端提供的接口,这时候就需要使用回调的方式进行wcf通讯了,也就是说服务端定义一个回调,客户端注册这个回调,然后就可以在这个回调里等待服务端的信息通知了第三步:服务端回调通知客户端信息wcf服务端WCFHostServer步骤1.在IService1.cs中增加一个回调接口ISvrToCliCallBack,增加方法NotifyClientMsg,设置该方法为单向,如图:2.Service1.cs中在客户端调用方法GetSvrTime的时候获取ISvrToCliCallBack的实例注意:使用OperationContext.Cu
14、rrent来获取当前客户端操作的实例只有在客户端调用服务端提供的接口的时候才能有效,否则为NULL所以OperationContext.Current.GetCallbackChannel必须在GetSvrTime里实现3.在FormServer窗体上增加一个按钮,点击该按钮实现通知客户端的功能在button增加下面代码csharpview plaincopyprint?1. privatevoidbutton1_Click(objectsender,EventArgse)2. 3. Service1.userCallBack.NotifyClientMsg(服务端给客户端通知啦);4. 调用
15、NotifyClientMsg通知客户端wcf客户端WCFHostClient步骤:1.在Debug目录中开启WCFHostServer.exe,客户端在ServiceReference1更新服务引用2.在FormClient中继承接口IService1Callback,实现方法NotifyClientMsg也就是说,当服务端有信息通知的时候(点击FromServer上面的“通知客户端”按钮)客户端的这个方法就会激活3.在FormClient_Load中使用双工绑定方式NetTcpBinding来连接wcf服务(注:不能使用单工方式basicHttpBinding)csharpview plaincopyprint?1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料采购检验保管制度
- 教育集团招标采购制度
- 材料采购及资金管理制度
- 机加采购管理制度
- 亨迪药业采购制度
- 企业宿舍采购管理制度范本
- 政府采购协议供货制度
- 政府单位采购审批制度
- 万科集中采购管理制度
- 药械采购与管理制度
- 动物园动物肖像摄影技巧
- (高清版)DB50∕T 392-2011 方形钢筋混凝土电杆
- 村居、社区退役军人服务站星级评定标准
- 智能温室大棚建设项目技术标施工组织设计施工方案(技术方案)
- 四川成都历年中考语文古诗欣赏试题汇编(2003-2023)
- 头顶一颗珠对VCI大鼠血脑屏障及紧密连接蛋白的影响及作用机制研究
- 接触网工学习通练习试题
- 锅炉暖风器改造施工方案
- 一元线性回归模型说课课件2024年第十届全国中小学实验教学说课活动
- 成都市崇州市2024年小升初必考题数学检测卷含解析
- 精索静脉曲张教学
评论
0/150
提交评论