WCF实现双向通信PPT精品文档

上传人:人*** 文档编号:591224680 上传时间:2024-09-17 格式:PPT 页数:42 大小:248.50KB
返回 下载 相关 举报
WCF实现双向通信PPT精品文档_第1页
第1页 / 共42页
WCF实现双向通信PPT精品文档_第2页
第2页 / 共42页
WCF实现双向通信PPT精品文档_第3页
第3页 / 共42页
WCF实现双向通信PPT精品文档_第4页
第4页 / 共42页
WCF实现双向通信PPT精品文档_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《WCF实现双向通信PPT精品文档》由会员分享,可在线阅读,更多相关《WCF实现双向通信PPT精品文档(42页珍藏版)》请在金锄头文库上搜索。

1、 Hands-On实训教程系列实训教程系列专题九专题九 WCF实现双向通信实现双向通信 Hands-On实训教程系列实训教程系列教学目标教学目标l进一步掌握进一步掌握WCF相关概念相关概念l了解了解WCF通信类型通信类型l掌握掌握WCF双向通信开发方法双向通信开发方法l掌握使用掌握使用IIS作为宿主部署作为宿主部署WCF服务服务 Hands-On实训教程系列实训教程系列工作任务工作任务l创建创建WCF双向通信双向通信l使用使用IIS部署部署WCF服务服务 Hands-On实训教程系列实训教程系列创建创建WCF双向通信双向通信 l打开打开Visual Studio 2008,创建名为,创建名为“

2、Server”的空白解决方案实现的空白解决方案实现双向通信双向通信。 Hands-On实训教程系列实训教程系列创建回调创建回调l在解决方案中创建名为在解决方案中创建名为“Contract”的类库项目,的类库项目,添加添加System.ServiceModel程序集的引用后程序集的引用后定义定义ICalculatorCallback接口接口using System.ServiceModel;namespace Contractpublic interface ICalculatorCallbackOperationContractvoid ShowResult(double x, double

3、y, double result); Hands-On实训教程系列实训教程系列创建服务契约创建服务契约l在在Contract类库中定义类库中定义ICalculator接口接口 using System.ServiceModel;namespace ContractServiceContract(CallbackContract=typeof(ICalculatorCallback)public interface ICalculatorOperationContractvoid Add(double x, double y); Hands-On实训教程系列实训教程系列创建服务实现创建服务实现l

4、在解决方案中创建名为在解决方案中创建名为“Service”的类库项目,的类库项目,加入加入Contract项目和项目和System.ServiceModel程序集的引用,编写程序集的引用,编写CalculatorService类类 using System;using System.ServiceModel;using Contract;namespace ServiceServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)public class CalculatorService:ICalculatorpublic void Ad

5、d(double x, double y)double result = x + y;ICalculatorCallback callback =OperationContext.Current.GetCallbackChannel();callback.ShowResult(x, y, result); Hands-On实训教程系列实训教程系列创建托管程序创建托管程序l在解决方案中创建名为在解决方案中创建名为“Host”的控制台应用的控制台应用程序,添加程序,添加Contract、Service项目和项目和System.ServiceModel程序集的引用,并创程序集的引用,并创建应用程序配

6、置文件建应用程序配置文件App.config,编写,编写服务服务配置配置 Hands-On实训教程系列实训教程系列启动监听启动监听l修改修改Host项目中项目中Program.cs的的Main方法,启方法,启动监听动监听 using System.ServiceModel;namespace Hostclass Programstatic void Main(string args)using (ServiceHost host = new ServiceHost(typeof(Service.CalculatorService)host.Open();Console.WriteLine(St

7、art listening.);Console.ReadLine(); Hands-On实训教程系列实训教程系列创建客户端解决方案创建客户端解决方案l运行运行Visual Studio 2008,创建名为,创建名为“Client”的控制台应用程序,添加的控制台应用程序,添加Contract和和System.ServiceModel程序集的引用,编写程序集的引用,编写实现实现ICalculatorCallback的的CalculatorCallbackHandler类类 using System;using Contract;namespace Clientpublic class Calcul

8、atorCallbackHandler:ICalculatorCallbackpublic void ShowResult(double x, double y, double result)Console.WriteLine(0 + 1 = 2, x, y, result); Hands-On实训教程系列实训教程系列创建客户端代理类创建客户端代理类l在在Client项目中添加项目中添加ClientCalculator类类 using System;using System.ServiceModel;using Contract;namespace Clientpublic class Cal

9、culatorClient:ClientBase,ICalculatorpublic CalculatorClient(InstanceContext callbackInstance): base(callbackInstance)public void Add(double x, double y)base.Channel.Add(x, y); Hands-On实训教程系列实训教程系列编写客户端配置文件编写客户端配置文件lClient项目中创建应用程序项目中创建应用程序配置文件配置文件App.config Hands-On实训教程系列实训教程系列访问服务访问服务l修改修改Client项目中

10、项目中Program.cs的的Main方法方法using Client;using System.ServiceModel;static void Main(string args)CalculatorCallbackHandler handler = new CalculatorCallbackHandler();InstanceContext context=new InstanceContext(handler);using (CalculatorClient client = new CalculatorClient(context)Console.Write(Begin to inv

11、oke calculator.);client.Add(1, 2);Console.ReadLine(); Hands-On实训教程系列实训教程系列启动程序启动程序l切换到切换到Server解决方案,设置解决方案,设置Host项目为启项目为启动项目,启动运行动项目,启动运行 l切换至切换至Client项目并启动运行项目并启动运行 Hands-On实训教程系列实训教程系列使用使用IIS部署部署WCF服务服务 l停止服务器端和客户端后在停止服务器端和客户端后在Server解决方案解决方案Contract项目下创建项目下创建ISessionCalculator接口接口 using System;us

12、ing System.ServiceModel;namespace ContractServiceContract(SessionMode = SessionMode.Required)public interface ISessionCalculatorOperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)void Add(double x,double y);OperationContract(IsOneWay = false, IsInitiating = false,IsTermina

13、ting = true)double GetResult(); Hands-On实训教程系列实训教程系列SessionCalculator类类 l向向Server解决方案中解决方案中Service项目下添加实现项目下添加实现了了ISessionCalculator接口的接口的SessionCalculator类类 using System.ServiceModel;using Contract;namespace ServiceServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)public class Sess

14、ionCalculator:ISessionCalculatorprivate double _result;public void Add(double x, double y)_result = x + y;public double GetResult()return _result; Hands-On实训教程系列实训教程系列创建目录创建目录l重新生成解决方案,在硬盘某个位置(路径中重新生成解决方案,在硬盘某个位置(路径中尽量没有中文或空格)创建一个名为尽量没有中文或空格)创建一个名为“WCF”的文件夹,在该文件夹下创建的文件夹,在该文件夹下创建Bin目录并将目录并将Server解决方案

15、中的解决方案中的Contract.dll和和Service.dll复制到该目录下复制到该目录下 Hands-On实训教程系列实训教程系列创建创建Calculator.svc l在在WCF文件夹下创建名为文件夹下创建名为“Calculator.svc”的的文本文件文本文件 Hands-On实训教程系列实训教程系列创建创建Web.configl在在WCF目录下创建目录下创建Web.config Hands-On实训教程系列实训教程系列布置虚拟目录布置虚拟目录l打开打开IIS,将创建的,将创建的WCF目录配置为虚拟目录目录配置为虚拟目录(例如(例如wcf),在浏览器中预览),在浏览器中预览Contr

16、act.svc文件文件 Hands-On实训教程系列实训教程系列创建客户端创建客户端WPF项目项目l在在Client解决方案中创建名为解决方案中创建名为“WPFClient”的的WPF应用程序并将该项目设置为启动项目应用程序并将该项目设置为启动项目 Hands-On实训教程系列实训教程系列添加服务引用添加服务引用l在在WPFClient项目中添加地址为项目中添加地址为http:/localhost/wcf/Calculator.svc的服务的服务引用引用 Hands-On实训教程系列实训教程系列放置控件放置控件l打开打开Window1.xaml放置控件计算两个数的和放置控件计算两个数的和 Ha

17、nds-On实训教程系列实训教程系列定义服务代理对象定义服务代理对象l在在Window1窗体后置代码中声明私有服务代窗体后置代码中声明私有服务代理变量理变量 l在窗体构造函数中初始化该对象在窗体构造函数中初始化该对象private ServiceReference1.SessionCalculatorClient client; public Window1()InitializeComponent();client = new WPFClient.ServiceReference1.SessionCalculatorClient(); Hands-On实训教程系列实训教程系列按钮点击事件按钮

18、点击事件l编写计算和取值按钮点击事件编写计算和取值按钮点击事件 private void btnCal_Click(object sender, RoutedEventArgs e)double x = Convert.ToDouble(txtX.Text);double y = Convert.ToDouble(txtY.Text);client.Add(x, y);private void btnLoad_Click(object sender, RoutedEventArgs e)lblResult.Content = client.GetResult(); Hands-On实训教程系列

19、实训教程系列运行程序运行程序l运行项目,输入两个计算数,计算结果后将值运行项目,输入两个计算数,计算结果后将值读取出来读取出来 Hands-On实训教程系列实训教程系列总结总结l进一步掌握进一步掌握WCF相关概念相关概念l了解了解WCF通信类型通信类型l掌握掌握WCF双向通信开发方法双向通信开发方法l掌握使用掌握使用IIS作为宿主部署作为宿主部署WCF服务服务 Hands-On实训教程系列实训教程系列WCF地址地址l服务的每一个端点必须有一个与该端点关联的服务的每一个端点必须有一个与该端点关联的地址,以便允许客户端应用程序找到并确定服地址,以便允许客户端应用程序找到并确定服务的端点。地址包含以

20、下内容:务的端点。地址包含以下内容:l传输协议,即模式,如传输协议,即模式,如httpl运行服务的设备的名称,例如运行服务的设备的名称,例如localhostl具体服务端点的路径,如具体服务端点的路径,如myservice Hands-On实训教程系列实训教程系列WCF地址示例地址示例l常用的地址格式:常用的地址格式:l1. HTTP地址:例如地址:例如http:/localhost:8080/servicel2. TCP地址:例如地址:例如net.tcp:/www.localhost/servicel3. IIS地址:例如地址:例如http:/localhost/service.svc Ha

21、nds-On实训教程系列实训教程系列绑定绑定lWCF中的绑定描述了端点如何通信及客户端如果连中的绑定描述了端点如何通信及客户端如果连接到端点,每一个服务端点均要明确的指定绑定,以接到端点,每一个服务端点均要明确的指定绑定,以使客户端与端点正确的连接与通信。使客户端与端点正确的连接与通信。绑定绑定配置元素配置元素说明说明BasicHttpBinding一个绑定,适用于与符合WS-Basic Profile 的Web服务(例如,基于ASP.NET Web 服务(ASMX)的服务)进行的通信。此绑定将HTTP用作传输协议,并将文本/XML用作默认消息编码。WSHttpBinding一个安全的、可互操

22、作的绑定,适合于非双工服务协定。WSDualHttpBinding一个安全且可互操作的绑定,适用于双工服务协定或通过SOAP媒介进行的通信。WSFederationHttpBinding一个支持WS-Federation协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。NetTcpBinding一个安全且经过优化的绑定,适用于WCF应用程序之间跨计算机的通信。NetNamedPipeBinding一个安全、可靠且经过优化的绑定,适用于WCF应用程序之间计算机上的通信。NetMsmqBinding一个排队绑定,适用于WCF应用程序之间的跨计算机的通信。NetPeer

23、TcpBinding一个启用安全的多计算机通信的绑定。MsmqIntegrationBinding一个适合于WCF应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。 Hands-On实训教程系列实训教程系列单向通信单向通信l单向通信就是指通信只在一个方向进行,即从单向通信就是指通信只在一个方向进行,即从客户端流向服务。服务不会发送响应,而客户客户端流向服务。服务不会发送响应,而客户端也不期望会有响应。这种情况下,客户端发端也不期望会有响应。这种情况下,客户端发送消息后继续执行。送消息后继续执行。 Hands-On实训教程系列实训教程系列定义单向通信定义单向通信l对于单向通信,将对于单向通

24、信,将OperationContract特性特性的的IsOneWay参数设为参数设为true(该属性默认为(该属性默认为false),这指示服务不需要做出响应。),这指示服务不需要做出响应。ServiceContractpublic interface ICalculatorOperationContract(IsOneWay=true)void Add(double x, double y); Hands-On实训教程系列实训教程系列请求请求/响应通信响应通信l请求请求/响应是指客户端向服务端发送信息后,响应是指客户端向服务端发送信息后,服务在执行请求结束会向客户端发送响应,这服务在执行请求

25、结束会向客户端发送响应,这也意味着在接收到服务的响应之前,客户端不也意味着在接收到服务的响应之前,客户端不会继续执行其他操作。会继续执行其他操作。 Hands-On实训教程系列实训教程系列定义请求定义请求/响应通信响应通信l在在WCF中设置请求中设置请求/响应通信,只需要将响应通信,只需要将OperationContract特性的特性的IsOneWay属性属性设为设为false,或者不指定,或者不指定IsOneWay属性(该属属性(该属性默认为性默认为false)。)。ServiceContractpublic interface ICalculatorOperationContractvoi

26、d Add(double x, double y);OperationContract(IsOneWay=false)void Divide(double x, double y); Hands-On实训教程系列实训教程系列双工(双向通信)双工(双向通信) l双工是客户端和服务均具有启动通信以及响应双工是客户端和服务均具有启动通信以及响应接收消息的能力,或者可以称其为双向通信。接收消息的能力,或者可以称其为双向通信。使用双向通信,服务端不仅可以响应来自客户使用双向通信,服务端不仅可以响应来自客户端的请求,还可以向客户端发送消息来启动与端的请求,还可以向客户端发送消息来启动与客户端的通信。客户端

27、的通信。 Hands-On实训教程系列实训教程系列实现双工通信实现双工通信-1 l服务契约。首先要为服务创建回调接口服务契约。首先要为服务创建回调接口l在创建服务的同时应用回调接口,使用在创建服务的同时应用回调接口,使用ServiceContract特性的特性的CallbackContract属性属性 ServiceContractpublic interface ICalculatorCallbackOperationContractvoid ShowResult(double x, double y, double result); ServiceContract(CallbackCont

28、ract=typeof(ICalculatorCallback) Hands-On实训教程系列实训教程系列实现双工通信实现双工通信-2l服务类。服务类实现双工服务契约时,使用服务类。服务类实现双工服务契约时,使用ServiceBehavior特性定义特性定义 l在服务类中可以通过调用在服务类中可以通过调用OperationContext静态方法获得委托实例:静态方法获得委托实例:ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple) OperationContext.Current.GetCallbackChannel(); Hand

29、s-On实训教程系列实训教程系列实现双工通信实现双工通信-3l客户端。客户端需要实现回调接口,接下来需客户端。客户端需要实现回调接口,接下来需要构建一个处理回调接口消息的机制,这是通要构建一个处理回调接口消息的机制,这是通过创建一个过创建一个InstanceContext的实例完成的的实例完成的 CalculatorCallbackHandler handler = new CalculatorCallbackHandler();InstanceContext context=new InstanceContext(handler); Hands-On实训教程系列实训教程系列WCF配置文件配置

30、文件l服务端和客户端均使用了服务端和客户端均使用了配置节,该配置节包含所有的配置节,该配置节包含所有的WCF配置配置元素。元素。 Hands-On实训教程系列实训教程系列服务端配置服务端配置-1l在服务端使用在服务端使用子节点子节点配置相关信息,此节点包含了一系列的配置相关信息,此节点包含了一系列的节点对每一个服务进行节点对每一个服务进行配置。配置。 Hands-On实训教程系列实训教程系列服务端配置服务端配置-2l如果如果address值为空,那么值为空,那么endpoint的地址就的地址就是默认的基地址,这里所谓的基地址可以在是默认的基地址,这里所谓的基地址可以在中通过配置中通过配置来定义来定义 Hands-On实训教程系列实训教程系列客户端配置客户端配置l在客户端使用在客户端使用标记配置相关标记配置相关信息,同样需要指定地址、绑定和契约信息,同样需要指定地址、绑定和契约

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号