




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专题九WCF实现双向通信,教学目标,进一步掌握WCF相关概念了解WCF通信类型掌握WCF双向通信开发方法掌握使用IIS作为宿主部署WCF服务,工作任务,创建WCF双向通信使用IIS部署WCF服务,创建WCF双向通信,打开VisualStudio2008,创建名为“Server”的空白解决方案实现双向通信。,创建回调,在解决方案中创建名为“Contract”的类库项目,添加System.ServiceModel程序集的引用后定义ICalculatorCallback接口,usingSystem.ServiceModel;namespaceContractpublicinterfaceICalculatorCallbackOperationContractvoidShowResult(doublex,doubley,doubleresult);,创建服务契约,在Contract类库中定义ICalculator接口,usingSystem.ServiceModel;namespaceContractServiceContract(CallbackContract=typeof(ICalculatorCallback)publicinterfaceICalculatorOperationContractvoidAdd(doublex,doubley);,创建服务实现,在解决方案中创建名为“Service”的类库项目,加入Contract项目和System.ServiceModel程序集的引用,编写CalculatorService类,usingSystem;usingSystem.ServiceModel;usingContract;namespaceServiceServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)publicclassCalculatorService:ICalculatorpublicvoidAdd(doublex,doubley)doubleresult=x+y;ICalculatorCallbackcallback=OperationContext.Current.GetCallbackChannel();callback.ShowResult(x,y,result);,创建托管程序,在解决方案中创建名为“Host”的控制台应用程序,添加Contract、Service项目和System.ServiceModel程序集的引用,并创建应用程序配置文件App.config,编写服务配置,启动监听,修改Host项目中Program.cs的Main方法,启动监听,usingSystem.ServiceModel;namespaceHostclassProgramstaticvoidMain(stringargs)using(ServiceHosthost=newServiceHost(typeof(Service.CalculatorService)host.Open();Console.WriteLine(Startlistening.);Console.ReadLine();,创建客户端解决方案,运行VisualStudio2008,创建名为“Client”的控制台应用程序,添加Contract和System.ServiceModel程序集的引用,编写实现ICalculatorCallback的CalculatorCallbackHandler类,usingSystem;usingContract;namespaceClientpublicclassCalculatorCallbackHandler:ICalculatorCallbackpublicvoidShowResult(doublex,doubley,doubleresult)Console.WriteLine(0+1=2,x,y,result);,创建客户端代理类,在Client项目中添加ClientCalculator类,usingSystem;usingSystem.ServiceModel;usingContract;namespaceClientpublicclassCalculatorClient:ClientBase,ICalculatorpublicCalculatorClient(InstanceContextcallbackInstance):base(callbackInstance)publicvoidAdd(doublex,doubley)base.Channel.Add(x,y);,编写客户端配置文件,Client项目中创建应用程序配置文件App.config,访问服务,修改Client项目中Program.cs的Main方法,usingClient;usingSystem.ServiceModel;staticvoidMain(stringargs)CalculatorCallbackHandlerhandler=newCalculatorCallbackHandler();InstanceContextcontext=newInstanceContext(handler);using(CalculatorClientclient=newCalculatorClient(context)Console.Write(Begintoinvokecalculator.);client.Add(1,2);Console.ReadLine();,启动程序,切换到Server解决方案,设置Host项目为启动项目,启动运行切换至Client项目并启动运行,使用IIS部署WCF服务,停止服务器端和客户端后在Server解决方案Contract项目下创建ISessionCalculator接口,usingSystem;usingSystem.ServiceModel;namespaceContractServiceContract(SessionMode=SessionMode.Required)publicinterfaceISessionCalculatorOperationContract(IsOneWay=true,IsInitiating=true,IsTerminating=false)voidAdd(doublex,doubley);OperationContract(IsOneWay=false,IsInitiating=false,IsTerminating=true)doubleGetResult();,SessionCalculator类,向Server解决方案中Service项目下添加实现了ISessionCalculator接口的SessionCalculator类,usingSystem.ServiceModel;usingContract;namespaceServiceServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)publicclassSessionCalculator:ISessionCalculatorprivatedouble_result;publicvoidAdd(doublex,doubley)_result=x+y;publicdoubleGetResult()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窗体后置代码中声明私有服务代理变量在窗体构造函数中初始化该对象,privateServiceReference1.SessionCalculatorClientclient;,publicWindow1()InitializeComponent();client=newWPFClient.ServiceReference1.SessionCalculatorClient();,按钮点击事件,编写计算和取值按钮点击事件,privatevoidbtnCal_Click(objectsender,RoutedEventArgse)doublex=Convert.ToDouble(txtX.Text);doubley=Convert.ToDouble(txtY.Text);client.Add(x,y);privatevoidbtnLoad_Click(objectsender,RoutedEventArgse)lblResult.Content=client.GetResult();,运行程序,运行项目,输入两个计算数,计算结果后将值读取出来,总结,进一步掌握WCF相关概念了解WCF通信类型掌握WCF双向通信开发方法掌握使用IIS作为宿主部署WCF服务,WCF地址,服务的每一个端点必须有一个与该端点关联的地址,以便允许客户端应用程序找到并确定服务的端点。地址包含以下内容:传输协议,即模式,如http运行服务的设备的名称,例如localhost具体服务端点的路径,如myservice,WCF地址示例,常用的地址格式:1.HTTP地址:例如http:/localhost:8080/service2.TCP地址:例如net.tcp:/www.localhost/service3.IIS地址:例如http:/localhost/service.svc,绑定,WCF中的绑定描述了端点如何通信及客户端如果连接到端点,每一个服务端点均要明确的指定绑定,以使客户端与端点正确的连接与通信。,单向通信,单向通信就是指通信只在一个方向进行,即从客户端流向服务。服务不会发送响应,而客户端也不期望会有响应。这种情况下,客户端发送消息后继续执行。,定义单向通信,对于单向通信,将OperationContract特性的IsOneWay参数设为true(该属性默认为false),这指示服务不需要做出响应。,ServiceContractpublicinterfaceICalculatorOperationContract(IsOneWay=true)voidAdd(doublex,doubley);,请求/响应通信,请求/响应是指客户端向服务端发送信息后,服务在执行请求结束会向客户端发送响应,这也意味着在接收到服务的响应之前,客户端不会继续执行其他操作。,定义请求/响应通信,在WCF中设置请求/响应通信,只需要将OperationContract特性的IsOneWay属性设为false,或者不指定IsOneWay属性(该属性默认为false)。,ServiceContractpublicinterfaceICalculatorOperationContractvoidAdd(doublex,doubley);OperationContract(IsOneWay=false)voidDivide(doublex,doubley);,双工(双向通信),双工是客户端和服务均具有启动通信以及响应接收消息的能力,或者可以称其为双向通信。使用双向通信,服务端不仅可以响应来自客户端的请求,还可以向客户端发送消息来启动与客户端的通信。,实现双工通信-1,服务契约。首先要为服务创建回调接口在创建服务的同时应用回调接口,使用ServiceContract特性的CallbackContract属性,ServiceContractpublicinterfaceICalculatorCallbackOperationContractvoidShowResult(doublex,doubley,doubleresult);,ServiceContract(CallbackContract=typeof(ICalculatorCallback),实现双工通信-2,服务类。服务类实现双工服务契约时,使用ServiceBehavior特性定义在服务类中可以通过调用OperationContext静态方法获得委托实例:,ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple),OperationContext.Current.GetCallbackChannel();,实现双工通信-3,客户端。客户端需要实现回调接口,接下来需要构建一个处理回调接口消息的机制,这是通过创建一个InstanceContext的实例完成的,Calculato
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林法律知识培训心得
- 棋王课件教学课件
- 桥环邻基参与效应课件
- 桥梁预应力张拉课件
- 2025年职业资格会计从业资格考试预测试题集锦
- 2025年民航飞行员执照私照PPL笔试模拟题及详解
- 2025年注册验船师资格考试(A级船舶检验法律法规)自测试题及答案一
- 理财专家一人公司商业模型方案 从副业起步构建月入10万的理财教育事业
- 2025年B级注册验船师资格考试复习资料练习题及答案一
- 2025年交通运输专业考试题及答案详解
- 2025年财政管理知识竞赛题库及答案
- 满意度调查测评方案
- 区域产业协同发展面试题
- 当归种植培训课件
- 三年(2023-2025)中考语文真题分类汇编(全国)专题22 议论文阅读(解析版)
- 学习2025年初中初三开学第一课专题
- 2025年浙江省教师招聘考试(语文)历年参考题库含答案详解(5卷)
- GA/T 2158-2024法庭科学资金数据获取规程
- 《工程勘察设计收费标准》(2002年修订本)
- 《重组与突破》黄奇帆
- 医院零星维修管理制度及零星维修审批单
评论
0/150
提交评论