资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
专题九 WCF实现双向通信,教学目标,进一步掌握WCF相关概念 了解WCF通信类型 掌握WCF双向通信开发方法 掌握使用IIS作为宿主部署WCF服务,工作任务,创建WCF双向通信 使用IIS部署WCF服务,创建WCF双向通信,打开Visual Studio 2008,创建名为“Server”的空白解决方案实现双向通信,创建回调,在解决方案中创建名为“Contract”的类库项目,添加System.ServiceModel程序集的引用后定义ICalculatorCallback接口,using System.ServiceModel; namespace Contract public interface 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 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(double 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方法,启动监听,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和System.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项目中添加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);,编写客户端配置文件,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 CalculatorClient(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 ServiceContract(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类,向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, double 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),在浏览器中预览Contract.svc文件,创建客户端WPF项目,在Client解决方案中创建名为“WPFClient”的WPF应用程序并将该项目设置为启动项目,添加服务引用,在WPFClient项目中添加地址为http:/localhost/wcf/Calculator.svc的服务引用,放置控件,打开Window1.xaml放置控件计算两个数的和,定义服务代理对象,在Window1窗体后置代码中声明私有服务代理变量 在窗体构造函数中初始化该对象,private ServiceReference1.SessionCalculatorClient client,public Window1() InitializeComponent(); 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(object sender, RoutedEventArgs e) lblResult.Content = client.GetResult();,运行程序,运行项目,输入两个计算数,计算结果后将值读取出来,总结,进一步掌握WCF相关概念 了解WCF通信类型 掌握WCF双向通信开发方法 掌握使用IIS作为宿主部署WCF服务,WCF地址,服务的每一个端点必须有一个与该端点关联的地址,以便允许客户端应用程序找到并确定服务的端点。地址包含以下内容: 传输协议,即模式,如http 运行服务的设备的名称,例如localhost 具体服务端点的路径,如myservice,WCF地址示例,常用的地址格式: 1. HTTP地址:例如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);,请求/响应通信,请求/响应是指客户端向服务端发送信息后,服务在执行请求结束会向客户端发送响应,这也意味着在接收到服
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号