WCF双向通信实现服务契约

WCF框架的出现,为我们解决了许多以前不能实现功能。那么对于WCF双向通信的具体含义又有多少人真正了解呢。在这里我们就来初步的探讨下WCF双向通信。#t#

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

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

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

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

 
 
 
  1. Contract:
  2. namespace Lin.Contract
  3. {
  4. [ServiceContract(CallbackContract=
    typeof(ICallBack))]
  5. public interface IHello
  6. {
  7. [OperationContract]
  8. void SayHelloTo(string userName);
  9. }
  10. }
  11. namespace Lin.Contract
  12. {
  13. [ServiceContract]
  14. public interface ICallBack
  15. {
  16. [OperationContract]
  17. void ReceiveTime(DateTime time);
  18. }
  19. }
  20. Service:
  21. namespace Lin.Service
  22. {
  23. [ServiceBehavior(ConcurrencyMode
    ConcurrencyMode = ConcurrencyMode
    .Reentrant)]
  24. public class ServiceHello : IHello
  25. {
  26. IHello 成员#region IHello 成员
  27. public void SayHelloTo(string userName)
  28. {
  29. Console.WriteLine("Hello {0}", userName);
  30. OperationContext.Current.GetCallbackChannel
    ().ReceiveTime(DateTime.Now);
  31. }
  32. #endregion
  33. }
  34. }Host:
  35. class Program
  36. {
  37. static void Main(string[] args)
  38. {
  39. using (ServiceHost host = 
    new ServiceHost(typeof(ServiceHello)))
  40. {
  41. host.Open();
  42. Console.Read();
  43. }
  44. }
  45. }Client:
  46. namespace Lin.Client
  47. {
  48. public class ClientCallBack:ICallBack
  49. {
  50. ICallBack 成员#region ICallBack 成员
  51. public void ReceiveTime(DateTime time)
  52. {
  53. Console.WriteLine("服务器收到消息的时间是
    :{0}", time.ToLongTimeString());
  54. }
  55. #endregion
  56. }
  57. }
  58. 调用服务:
  59. namespace Lin.Client
  60. {
  61. public class ClientHello : 
    DuplexClientBase, IHello
  62. {
  63. public ClientHello(InstanceContext 
    instance) : base(instance) { }
  64. IHello 成员#region IHello 成员
  65. public void SayHelloTo(string userName)
  66. {
  67. base.Channel.SayHelloTo(userName);
  68. }
  69. #endregion
  70. }
  71. }
  72. class Program
  73. {
  74. static void Main(string[] args)
  75. {
  76. Hello();
  77. Console.Read();
  78. }
  79. static void Hello()
  80. {
  81. ClientCallBack callBack = 
    new ClientCallBack();
  82. ClientHello hello = 
    new ClientHello(new 
    InstanceContext(callBack));
  83. string commandString = string.Empty;
  84. while (commandString != "exit")
  85. {
  86. commandString = Console.ReadLine();
  87. hello.SayHelloTo(commandString);
  88. }
  89. }
  90. }

如同OO的出现一样,有些人是注重OO的思想,有些人注重OO的实现。同样的,WCF双向通信应该更多的是提倡一种面向服务架构的思想。SOA如何实现,这个不重要,每个平台都有自己的实现方式。这也体现了技术要服务于社会。

文章名称:WCF双向通信实现服务契约
当前路径:http://www.mswzjz.cn/qtweb/news2/441052.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

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