专题九-WCF实现双向通信

上传人:W**** 文档编号:167660841 上传时间:2021-02-15 格式:PPT 页数:42 大小:247KB
返回 下载 相关 举报
专题九-WCF实现双向通信_第1页
第1页 / 共42页
专题九-WCF实现双向通信_第2页
第2页 / 共42页
专题九-WCF实现双向通信_第3页
第3页 / 共42页
专题九-WCF实现双向通信_第4页
第4页 / 共42页
专题九-WCF实现双向通信_第5页
第5页 / 共42页
点击查看更多>>
资源描述

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

1、专题九 WCF实现双向通信,教学目标,进一步掌握WCF相关概念 了解WCF通信类型 掌握WCF双向通信开发方法 掌握使用IIS作为宿主部署WCF服务,工作任务,创建WCF双向通信 使用IIS部署WCF服务,创建WCF双向通信,打开Visual Studio 2008,创建名为“Server”的空白解决方案实现双向通信,创建回调,在解决方案中创建名为“Contract”的类库项目,添加System.ServiceModel程序集的引用后定义ICalculatorCallback接口,using System.ServiceModel; namespace Contract public inte

2、rface ICalculatorCallback OperationContract void ShowResult(double x, double y, double result);,创建服务契约,在Contract类库中定义ICalculator接口,using System.ServiceModel; namespace Contract ServiceContract(CallbackContract=typeof(ICalculatorCallback) public interface ICalculator OperationContract void Add(double

3、 x, double y);,创建服务实现,在解决方案中创建名为“Service”的类库项目,加入Contract项目和System.ServiceModel程序集的引用,编写CalculatorService类,using System; using System.ServiceModel; using Contract; namespace Service ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple) public class CalculatorService:ICalculator public void Add(d

4、ouble x, double y) double result = x + y; ICalculatorCallback callback = OperationContext.Current.GetCallbackChannel (); callback.ShowResult(x, y, result);,创建托管程序,在解决方案中创建名为“Host”的控制台应用程序,添加Contract、Service项目和System.ServiceModel程序集的引用,并创建应用程序配置文件App.config,编写服务配置,启动监听,修改Host项目中Program.cs的Main方法,启动监听

5、,using System.ServiceModel; namespace Host class Program static void Main(string args) using (ServiceHost host = new ServiceHost(typeof(Service.CalculatorService) host.Open(); Console.WriteLine(Start listening.); Console.ReadLine();,创建客户端解决方案,运行Visual Studio 2008,创建名为“Client”的控制台应用程序,添加Contract和Syst

6、em.ServiceModel程序集的引用,编写实现ICalculatorCallback的CalculatorCallbackHandler类,using System; using Contract; namespace Client public class CalculatorCallbackHandler:ICalculatorCallback public void ShowResult(double x, double y, double result) Console.WriteLine(0 + 1 = 2, x, y, result);,创建客户端代理类,在Client项目中

7、添加ClientCalculator类,using System; using System.ServiceModel; using Contract; namespace Client public class CalculatorClient:ClientBase,ICalculator public CalculatorClient(InstanceContext callbackInstance) : base(callbackInstance) public void Add(double x, double y) base.Channel.Add(x, y);,编写客户端配置文件,

8、Client项目中创建应用程序配置文件App.config,访问服务,修改Client项目中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 Calcu

9、latorClient(context) Console.Write(Begin to invoke calculator.); client.Add(1, 2); Console.ReadLine();,启动程序,切换到Server解决方案,设置Host项目为启动项目,启动运行 切换至Client项目并启动运行,使用IIS部署WCF服务,停止服务器端和客户端后在Server解决方案Contract项目下创建ISessionCalculator接口,using System; using System.ServiceModel; namespace Contract ServiceContra

10、ct(SessionMode = SessionMode.Required) public interface ISessionCalculator OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false) void Add(double x,double y); OperationContract(IsOneWay = false, IsInitiating = false, IsTerminating = true) double GetResult();,SessionCalculator

11、类,向Server解决方案中Service项目下添加实现了ISessionCalculator接口的SessionCalculator类,using System.ServiceModel; using Contract; namespace Service ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession) public class SessionCalculator:ISessionCalculator private double _result; public void Add(double x, do

12、uble y) _result = x + y; public double GetResult() return _result;,创建目录,重新生成解决方案,在硬盘某个位置(路径中尽量没有中文或空格)创建一个名为“WCF”的文件夹,在该文件夹下创建Bin目录并将Server解决方案中的Contract.dll和Service.dll复制到该目录下,创建Calculator.svc,在WCF文件夹下创建名为“Calculator.svc”的文本文件,创建Web.config,在WCF目录下创建Web.config,布置虚拟目录,打开IIS,将创建的WCF目录配置为虚拟目录(例如wcf),在浏

13、览器中预览Contract.svc文件,创建客户端WPF项目,在Client解决方案中创建名为“WPFClient”的WPF应用程序并将该项目设置为启动项目,添加服务引用,在WPFClient项目中添加地址为http:/localhost/wcf/Calculator.svc的服务引用,放置控件,打开Window1.xaml放置控件计算两个数的和,定义服务代理对象,在Window1窗体后置代码中声明私有服务代理变量 在窗体构造函数中初始化该对象,private ServiceReference1.SessionCalculatorClient client,public Window1() I

14、nitializeComponent(); client = new WPFClient.ServiceReference1.SessionCalculatorClient();,按钮点击事件,编写计算和取值按钮点击事件,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(obje

15、ct sender, RoutedEventArgs e) lblResult.Content = client.GetResult();,运行程序,运行项目,输入两个计算数,计算结果后将值读取出来,总结,进一步掌握WCF相关概念 了解WCF通信类型 掌握WCF双向通信开发方法 掌握使用IIS作为宿主部署WCF服务,WCF地址,服务的每一个端点必须有一个与该端点关联的地址,以便允许客户端应用程序找到并确定服务的端点。地址包含以下内容: 传输协议,即模式,如http 运行服务的设备的名称,例如localhost 具体服务端点的路径,如myservice,WCF地址示例,常用的地址格式: 1. H

16、TTP地址:例如http:/localhost:8080/service 2. TCP地址:例如net.tcp:/www.localhost/service 3. IIS地址:例如http:/localhost/service.svc,绑定,WCF中的绑定描述了端点如何通信及客户端如果连接到端点,每一个服务端点均要明确的指定绑定,以使客户端与端点正确的连接与通信,单向通信,单向通信就是指通信只在一个方向进行,即从客户端流向服务。服务不会发送响应,而客户端也不期望会有响应。这种情况下,客户端发送消息后继续执行,定义单向通信,对于单向通信,将OperationContract特性的IsOneWay参数设为true(该属性默认为false),这指示服务不需要做出响应,ServiceContract public interface ICalculator OperationContract(IsOneWay=true) void Add(double x, double y);,请求/响应通信,请求/响应是指客户端向服务端发送信息后,服务在执行请求结束会向客户端发送响应,这也意味着在接收到服

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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