WCF编程:WCF服务和客户端的建立_第1页
WCF编程:WCF服务和客户端的建立_第2页
WCF编程:WCF服务和客户端的建立_第3页
WCF编程:WCF服务和客户端的建立_第4页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.概念Windows CommunicationFoundation(WCF)是由 微软发展的一组数据通信的应用程序开发接口 ,可以翻译为Windows通讯接口。它是.NET框架 的一部分,由.NET Framework3.0 开始引入。WCF 的终结点有三个要素组成,分别是地址(Address )、绑定( Binding )和契约( Contract ),简记可写成 Endpoint = ABC 。地址:地址决定了服务的位置,解决了服务寻址的问题。绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。绑定的类型包括BasicHttpBindin

2、g、 WsHttpBinding、 NetTcpBinding等。契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。2.契约WCF的基本概念是以契约 (Contract)来定义双方沟通的协议,契约必须要以 接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。契约 分成了四种:数据 契约 (Data Contract) ,订定双方沟通时的数据格式。服务契约 (Service Contract) ,订定服务的定义。操作契约 (OperationContract) ,订定服务提供的方法。消息契约(MessageContract) ,订定在通信期间改写消息内容的规范。如

3、下图,解释了契约:3.绑定由于 WCF支持了 HTTP , TCP , Named Pipe , MSMQ ,Peer-T o-Peer TCP等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持(WsHttpBinding),而 TCP亦支持NetT cpBinding ,NetPeerTcpBinding等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。基本绑定 (BasicHttpBinding)对应 BasicHttpBinding 类,能够将 WCF 服务公开为传统的的程序能够使用现在的 WC

4、F 服务。在实际开发中一个 WCF 用,如给 Java 的程序调用,给 Flex 的程序调用等,那么采用过了ASMX Web 服务,是以前就服务可能会给不同的程序调BasicHttpBinding最合适不TCP 绑定 (NetT cpBinding)对应与 NetTcpBinding类, TCP 绑定使用 TCP 协议在 Intranet 中跨机器的通信,注意这里是 Intranet 而非 Internet 。支持多种特性,包括可靠性、事务性、安全性、以及WCF 之间通信的优化。前提是要求客户端与服务端都必须使用WCF4.程序设计第一步: wcf 服务端新建一个 “windows窗体程序 ”名

5、称为 WCFHostServer,然后添加一个“WCF服务 ”名称为Service1给窗体取名为FormService ,然后在窗体的Load 事件中编写代码启动wcf 服务:NetTcpBinding方式启动 wcf 服务和 BasicHttpBinding方式启动 wcf 服务csharpviewplaincopyprint?在窗体的1.ServiceHostm_ServiceHost;csharpviewplaincopyprint?1.privatevoidForm1_Load( objectsender,EventArgse)2. 3./NetTcpBinding方式启动 wcf 服

6、务4.m_ServiceHost= new ServiceHost(typeof(Service1);/Service1是 wcf服务的类名称5.NetTcpBindingbinding=new NetTcpBinding();6.Uri baseAddress= new Uri(string.Format("net.tcp:/localhost:10086/WCFHostServer/Service1");7.m_ServiceHost.AddServiceEndpoint(typeof(IService1),binding,baseAddress);8./BasicHt

7、tpBinding方式启动 wcf 服务9.ServiceMetadataBehaviormetadataBehavior;10.metadataBehavior= m_ServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();11.if (metadataBehavior= null )12. 13.metadataBehavior=new ServiceMetadataBehavior();14.metadataBehavior.HttpGetEnabled= true ;15.metadataBehav

8、ior.HttpGetUrl= new Uri( string .Format( "http:/localhost:10085/WCFHostServer/Service1");16.m_ServiceHost.Description.Behaviors.Add(metadataBehavior);17.18.m_ServiceHost.Open();19.Closeing 中编写服务退出代码csharpviewplaincopyprint?1.privatevoidFormService_FormClosing(objectsender,FormClosingEventA

9、rgse)2. 3.if(m_ServiceHost!=null )4. 5.m_ServiceHost.Close();6.m_ServiceHost= null ;7. 8. 在 IService1.cs 中增加一个方法 GetSvrTime在 Service1.cs 中实现接口的方法 GetSvrTime ,获取服务器时间第二步: WCF 客户端新建一个 “windows窗体程序 ”命名为 WCFHostClient ,在 Debug 中运行 WCFHostServer 窗体(这一步很重要) ,然后在项目 WCFHostClient 中右键 - “添加服务引用 ”,在地址填入以 Basi

10、cHttpBinding 绑定方式启动 wcf 服务的地址http:/localhost:10085/WCFHostServer/Service1,点击 “前往 ”,然后连接上后点击“确定 ”,在 WCFHostClient 项目中就会增加一个 Service References (ServiceReference1 )将窗体命名为FormClient.cs,在窗体上增加两个textbox(ip 为 textbox1 ,port 为textbox2) 和一个 button ,如下图:在 button 中增加 wcf 客户端连接wcf 服务端的代码csharpviewplaincopyprin

11、t?1.privatevoidbutton1_Click_1(objectsender,EventArgse)2. 3./basicHttpBinding绑定方式的通讯单工4.Service1Clienthost =new ServiceReference1.Service1Client();5.stringhtime=host.GetSvrTime();/ 调用 GetSvrTime获取到 wcf服务器上的时间6.MessageBox.Show("basicHttpBinding"+ ""+htime);7.8./NetTcpBinding绑定方式的通

12、讯双工9.IService1m_Innerclient;10.ChannelFactory<IService1>m_ChannelFactory;11.NetTcpBindingbinding= new NetTcpBinding();12.UribaseAddress= new Uri( string.Format("net.tcp:/0:1/WCFHostServer/Service1",textBox1.Text,textBox2.Text);13.m_ChannelFactory=new ChannelFactory<IService1>(b

13、inding,new EndpointAddress(baseAddress);14.m_Innerclient=m_ChannelFactory.CreateChannel();15.stringhtime1=m_Innerclient.GetSvrTime();/调用 GetSvrTime获取到wcf 服务器上的时间16.MessageBox.Show("NetTcpBinding"+""+htime1);17.上面的代码是客户端调用服务端提供的接口 GetSvrTime 来通讯的,那么服务端如果发生了一个事件想主动通知客户端,又不可能反向调用客户端

14、提供的接口,这时候就需要使用回调的方式进行 wcf 通讯了,也就是说服务端定义一个回调,客户端注册这个回调,然后就可以在这个回调里等待服务端的信息通知了第三步:服务端回调通知客户端信息wcf 服务端 WCFHostServer步骤1.在 IService1.cs中增加一个回调接口ISvrT oCliCallBack ,增加方法NotifyClientMsg,设置该方法为单向,如图:中在客户端调用方法GetSvrTime的时候获取ISvrT oCliCallBack的实例注意: 使用 OperationContext.Current来获取当前客户端操作的实例只有在客户端调用服务端提供的接口的时候

15、才能有效,否则为NULL所以必须在 GetSvrTime里实现3.在 FormServer窗体上增加一个按钮,点击该按钮实现通知客户端的功能在 button 增加下面代码csharpviewplaincopyprint?1.privatevoidbutton1_Click(objectsender,EventArgse)2. 3." 服务端给客户端通知啦" );4. 调用 NotifyClientMsg通知客户端wcf 客户端 WCFHostClient步骤:1.在 Debug 目录中开启WCFHostServer.exe,客户端在ServiceReference1更新服务引用2.在 FormClient中继承接口IService1Callback,实现方法NotifyClientMsg也就是说,当服务端有信息通知的时候(点击FromServer上面的 “通知客户端 ”按钮)客户端的这个方法就会激活3.在 FormClient_Load中使用双工绑定方式NetTcpBinding来连接 wcf 服务(注:不能使用单工方式basicHttpBinding)csharpviewplaincopy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论