WCF双向通信相关概念正确理解

开发 开发工具
在WCF双向通信中,我们定义了两个服务,其中一个是供消费程序消费的,而一种则是在callBack的时候调用的服务。

WCF的出现,给开发领域带来了不小的变化。那么如何才能正确的应用这一新的技术呢?在这里我们可以先从WCF双向通信的相关概念开始了解,以此来进一步加深我们对这一工具的了解程度。#t#

WCF整合了Remoting和webService等等。而且开发简单(相对的),它既弥补Remoting的只能在.net上运行,又弥补了asmx只能单向传送消息的缺点。也就是说,WCF是实现跨平台,在跨平台的同时,也可以双向通信。在WCF的编程思想中,无疑将SOA的思想体现的***。

首先要做的是就是定义服务契约。定义契约一般使用接口,使得实现和消费这个服务的双方都要按照这个契约来实现相应的接口。在双向通信中至少要定义两个服务,一个服务是供消费程序消费的,另一个则是在callBack的时候调用的服务,这个服务应该由消费程序实现。

其次,就是在服务端实现这些契约(说白了就是实现上面定义的接口)。在开发中,我们经常会把这个实现独立出来,方便在不同的宿主中发布这些服务。

***,实现客户端。在WCF双向通信中,客户端也是服务端,因为它也实现了服务契约。

来段代码:

  1. namespace Lin.Contract  
  2. {  
  3. [ServiceContract(CallbackContract=typeof(ICallBack))]  
  4. public interface IHello  
  5. {  
  6. [OperationContract]  
  7. void SayHelloTo(string userName);  
  8. }  
  9. }  
  10. namespace Lin.Contract  
  11. {  
  12. [ServiceContract]  
  13. public interface ICallBack  
  14. {  
  15. [OperationContract]  
  16. void ReceiveTime(DateTime time);  
  17. }  
  18. }  
  19. Service:  
  20. namespace Lin.Service  
  21. {  
  22. [ServiceBehavior(ConcurrencyModeConcurrencyMode = 
    ConcurrencyMode.Reentrant)]  
  23. public class ServiceHello : IHello  
  24. {  
  25. IHello 成员#region IHello 成员  
  26. public void SayHelloTo(string userName)  
  27. {  
  28. Console.WriteLine("Hello {0}", userName);  
  29. OperationContext.Current.GetCallbackChannel<ICallBack>()
    .ReceiveTime(DateTime.Now);  
  30. }  
  31. #endregion  
  32. }  
  33. }Host:  
  34. class Program  
  35. {  
  36. static void Main(string[] args)  
  37. {  
  38. using (ServiceHost host = new ServiceHost(typeof(ServiceHello)))  
  39. {  
  40. host.Open();  
  41. Console.Read();  
  42. }  
  43. }  
  44. }Client:  
  45. namespace Lin.Client  
  46. {  
  47. public class ClientCallBack:ICallBack  
  48. {  
  49. ICallBack 成员#region ICallBack 成员  
  50. public void ReceiveTime(DateTime time)  
  51. {  
  52. Console.WriteLine("服务器收到消息的时间是:{0}", 
    time.ToLongTimeString());  
  53. }  
  54. #endregion  
  55. }  

WCF双向通信调用服务:

  1. namespace Lin.Client  
  2. {  
  3. public class ClientHello : DuplexClientBase<IHello>, IHello  
  4. {  
  5. public ClientHello(InstanceContext instance) : base(instance) { } 

 

IHello 成员#region IHello 成员

 

  1. public void SayHelloTo(string userName)  
  2. {  
  3. base.Channel.SayHelloTo(userName);  
  4. }  
  5. #endregion  
  6. }  
  7. }  
  8. class Program  
  9. {  
  10. static void Main(string[] args)  
  11. {  
  12. Hello();  
  13. Console.Read();  
  14. }  
  15. static void Hello()  
  16. {  
  17. ClientCallBack callBack = new ClientCallBack();  
  18. ClientHello hello = new ClientHello(new InstanceContext(callBack));  
  19. string commandString = string.Empty;  
  20. while (commandString != "exit")  
  21. {  
  22. commandString = Console.ReadLine();  
  23. hello.SayHelloTo(commandString);  
  24. }  
  25. }  

以上就是我们对WCF双向通信的相关介绍。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-22 09:11:31

WCF双向通信

2009-12-08 11:17:41

WCF双向通信

2009-06-18 10:29:24

Hibernate I

2009-12-14 17:48:46

Ruby String

2023-10-17 17:13:14

内存程序源码

2010-08-04 16:41:01

2020-01-07 15:10:32

Linuxinode命令

2010-08-05 09:53:35

2010-07-20 12:35:33

SQL Server索

2010-02-01 10:54:37

C++框架

2009-12-04 18:00:46

PHP开发MVC模型

2024-01-29 00:35:00

Go并发开发

2023-12-27 19:52:08

Go模块命令

2010-02-04 14:01:43

C++非类型类模板参数

2009-12-03 18:07:47

PHP转义

2009-12-09 14:04:45

PHP include

2010-01-18 17:29:35

VB.NET函数调用

2010-02-04 15:05:00

C++ cpuid指令

2010-02-26 14:05:57

WCF通信方式

2009-12-17 11:36:55

Ruby输入输出
点赞
收藏

51CTO技术栈公众号