WCF契约回调六步骤简单操作

在WCF开发插件中,对于契约的各种操作是一个比较重要的基础应用技术,我们在学习的过程中需要对其进行充分的掌握。在这里我们就先来一起了解一下关于WCF契约回调的相关方法。方便大家理解。#t#

站在用户的角度思考问题,与客户深入沟通,找到沁源网站设计与沁源网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、虚拟空间、企业邮箱。业务覆盖沁源地区。

在WCF的默认的绑定中WSDualHttpBinding是一个安全且可互操作的绑定。适用于双工服务协定或通过 SOAP 媒介进行的通信。本示例就是基于此绑定来实现的。为在编程中多应用些WCF编程的技术,服务端采用代码来创建服务端承载。

WCF契约回调第一步 创建标准契约和回调契约

回调契约,用于在客户端显示结果信息

 
 
 
  1. [ServiceContract(Namespace="http://www,cbcye.com/wcf/Callback/)]  
  2. public interface ICalculatorCallback  
  3. {  
  4. [OperationContract]  
  5. void ShowResult(double x, double y, double result);  
  6. }  

标准契约,声明了回调契约的类型

 
 
 
  1. [ServiceContract(CallbackContract = typeof(ICalculatorCallback))]  
  2. public interface IDuplexCalculator  
  3. {  
  4. [OperationContract]  
  5. void Add(double x, double y);  
  6. }  

WCF契约回调第二步 在服务端实现标准契约

 
 
 
  1. [ServiceBehavior(ConcurrencyModeConcurrencyMode=ConcurrencyMode.Multiple)]  
  2. public class DuplexCalculatorService:IDuplexCalculator  
  3. {   
  4. IDuplexCalculator Members#region IDuplexCalculator Members   
  5. public void Add(double x, double y)  
  6. {  
  7. double result = x + y;  
  8. //调用 GetCallbackChannel< (Of < (T>)>) 属性以获取通道,
    使用该通道可以调用调用服务的客户端实例的操作。  
  9. ICalculatorCallback callBack = OperationContext.Current.
    GetCallbackChannel< ICalculatorCallback>();  
  10. callBack.ShowResult(x, y, result);  
  11. }   
  12. #endregion  
  13. }  

WCF契约回调第三步 创建服务端承载

 
 
 
  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. HostCalculatorService();  
  6. }   
  7. static void HostCalculatorService()  
  8. {  
  9. Uri dualUri = new Uri("http://localhost:7788/cbcye/Calculator%22);  
  10. //向HOST中添加BaseAddress  
  11. using (ServiceHost calculatorServiceHost = new ServiceHost
    (typeof(DuplexCalculatorService), dualUri))  
  12. {  
  13. //WSDualHttpBinding适用于双工服务协定或通过 SOAP 媒介进行的通信。  
  14. WSDualHttpBinding wsDualHttpBinding = new WSDualHttpBinding();  
  15. //添加服务绑定和服务契约  
  16. calculatorServiceHost.AddServiceEndpoint(typeof(IDuplexCalculator), 
    wsDualHttpBinding, string.Empty);   
  17. //绑定服务行为  
  18. ServiceMetadataBehavior behavior = calculatorServiceHost.
    Description.Behaviors.Find< ServiceMetadataBehavior>();  
  19. {  
  20. if (behavior == null)  
  21. {  
  22. behavior = new ServiceMetadataBehavior();  
  23. behavior.HttpGetEnabled = true;  
  24. calculatorServiceHost.Description.Behaviors.Add(behavior);  
  25. }  
  26. else  
  27. {  
  28. behavior.HttpGetEnabled = true;  
  29. }  
  30. }   
  31. //启动事件  
  32. calculatorServiceHost.Opened += delegate  
  33. {  
  34. Console.WriteLine("Calculator Service has begun to listen 
    on "+ dualUri.ToString());  
  35. };   
  36. calculatorServiceHost.Open();  
  37. Console.Read();  
  38. }  
  39. }  

WCF契约回调第四步 在客户端实现回调契约

 
 
 
  1. class CalculatorCallbackHandler:ICalculatorCallback  
  2. {  
  3. #region ICalculatorCallback Members   
  4. public void ShowResult(double x, double y, double result)  
  5. {  
  6. Console.WriteLine("x + y = {2} (x = {0} , y = {1})", x, y, result);  
  7. }   
  8. #endregion  

WCF契约回调第五步 实现客户端代理

 
 
 
  1. class ClientProxy:ClientBase< IDuplexCalculator>,IDuplexCalculator  
  2. {   
  3. public ClientProxy(InstanceContext callbackInstance)  
  4. : base(callbackInstance)  
  5. { }   
  6. #region IDuplexCalculator Members   
  7. public void Add(double x, double y)  
  8. {  
  9. this.Channel.Add(x, y);  
  10. }  
  11. #endregion  

WCF契约回调第六步 客户端调用

程序代码

 
 
 
  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. try  
  6. {  
  7. InvocateDuplexCalculator();  
  8. }  
  9. catch (Exception exp)  
  10. {  
  11. Console.WriteLine("[Error] " + exp.Message);  
  12. }   
  13. Console.Read();  
  14. }   
  15. static void InvocateDuplexCalculator()  
  16. {  
  17. CalculatorCallbackHandler callbackHandler = 
    new CalculatorCallbackHandler();   
  18. using (ClientProxy calculator = new ClientProxy
    (new InstanceContext(callbackHandler)))  
  19. {  
  20. Console.WriteLine("Begin to invocate duplex calculator ");  
  21. calculator.Add(85, 86);  
  22. calculator.Close();  
  23. }  
  24. }  

配置文件

由于使用WSDualHttpBinding绑定执行回调时,需要开通两个HTTP通道,一个用于服务,一个用于回调。因此需要配置两个HTTP地址。

 
 
 
  1. < ?xml version="1.0" encoding="utf-8" ?> 
  2. < configuration> 
  3. < system.serviceModel> 
  4. < client> 
  5. < !--bindingConfiguration - 指定一个binding的配置名称,跟< bindings>
    下面同类< binding>的name匹配--> 
  6. < endpoint name="SubscriptionService" 
  7. address="http://localhost:7788/cbcye/Calculator%22  
  8. binding="wsDualHttpBinding" 
  9. bindingConfiguration="wsDualHttpBinding_DuplexCalculator" 
  10. contract="Cbcye.Contract.IDuplexCalculator" 
  11. /> 
  12. < /client> 
  13. < bindings> 
  14. < !-- 指定一个或多个系统预定义的binding,比如< basicHttpBinding>,
    当然也可以指定自定义的customBinding,  
  15. 然后在某个指定的binding下建立一个或多个配置,以便被Endpoint来使用这些配置 --> 
  16. < wsDualHttpBinding> 
  17. < binding 
  18. name="wsDualHttpBinding_DuplexCalculator" 
  19. clientBaseAddress="http://localhost:7799/cbcye/Calculator%22  
  20. /> 
  21. < /wsDualHttpBinding> 
  22. < /bindings> 
  23. < /system.serviceModel> 
  24. < /configuration> 

以上就是WCF契约回调的全部方法介绍。

本文标题:WCF契约回调六步骤简单操作
网页网址:http://www.gawzjz.com/qtweb2/news25/3875.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联