`
chinamming
  • 浏览: 152484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

有了WCF,Socket是否已人老珠黄?

 
阅读更多

1. Socket相关背景

  Socket,中文译为“套接字”,最早在UNIX中引入并得到广泛应用,后来微软在设计Windows时引入了UNIX中的这个概念和相应的设计理念,并针对Windows的特性略作调整,形成了Windows平台上的Socket,简称为“WinSock”,并为开发者提供了一整套的API,称为“Windows WinSock Win32 API ”。

  WinSock经历了两个版本,Windows Sockets 2是目前用得最多的版本(参看 http://en.wikipedia.org/wiki/Winsock )。

图 1所示为.NET平台下网络应用程序的层次架构:

      图 1
  WinSock在底层使用一个运行于操作系统核心的系统驱动(Windows Sockets Knernel-mode Driver)tcpip.SYS,由它们负责管理网络连接和缓冲管理。还有另一个驱动Afd.sys(Ancillary Function Driver for WinSock)则用于支持基于 window socket的应用程序,比如ftp、telnet等,被称为“ Windows NT 套接字驱动程序 ”。

  早期的Windows开发者,需要使用C/C++去调用WinSock,比如MFC就提供了一个“CSocket”类封装底层的Socket。.NET也提供了一组类来封装WinSock Win32 API,这些类集中于System.Net这一命名空间中,其中的核心类型就是Socket。Socket类是对WinSock API一个很浅的封装,拥有不少方法直接对应于WinSock中的C/C++函数,比如Poll、Select、IOControl等。

  Socket有一个Handle属性,它引用位于操作系统核心的Socket核心对象。Socket提供了众多的属性,还提供了SetSocketOption方法来设置各种选项,对.NET网络应用程序的数据通讯进行“微调”。Socket的功能出奇地强大,在.NET平台上,它支持以下四种典型的编程模式:

  (1)居于阻塞模式的Socket编程(单线程或多线程的),每个线程处理一个客户端连接

  (2)“非阻塞”模式的Socket编程,这是早期UNIX为提升网络应用程序性能而采用的编程模式,出于兼容和方便移植原有程序的目的而保留,建议新开发的.NET网络程序不要再使用。

  (3)使用IAsyncResult的异步编程模式:Socket类提供有一堆的“BeginXXX/EndXXX”方法实现异步Socket编程,使用线程池中的线程完成工作,性能较好。

  (4)使用EAP的异步编程模式:Socket类提供了“另一堆”以“Async”结尾的方法,在底层使用Windows操作系统的Completion Port(完成端口)和Overlapped I/O mechanism(重叠输入/输出机制),可以提供“最高”的性能。


2. 有了WCF,Socket是否已人老珠黄?

  基于Socket开发网络应用程序已经有很多年的历史了,现在的新技术层出不穷,在.NET平台之上,WCF大有“一统江湖”的势头,Socket是否真的“人老珠黄”?

  请看图 2所示的多层“松花蛋”:

  
                        图 2
  图 2说明,WCF与WinSocket等底层技术之间实际上是一种“包含”关系,每一层都在下一层所提供服务的基础上,又扩充了新的功能,越外层的应用程序,可以使用的功能往往越多,开发效率往往也会更高。WCF在WinSocket的基础之上扩充了大量的功能,使用它可以很高效地开发网络应用程序,尤其非常适合于开发基于SOA的分布式软件系统,但这并不是说它可以完全把Socket打入冷宫。在不少场合,抛弃WCF那庞大的框架,直接使用Socket更合适:

  (1)需要实现自己的通讯协议的场合(比如你要架设一个网络游戏服务器)。

  (2)你开发的系统需要实现“一问一答”的“交互式”运行模式。

  (3)你希望能全面控制你的网络应用程序的“每个方面”,不想花时间去理解WCF那个复杂无比的内部架构。

  (4)你的网络应用程序应用背景非常单一与明确,比如就解决一个问题:定期将分布于多台计算机上的数据文件上传“汇总”到一台中心服务器上。

  (5)……

  如果需要基于各种标准协议(比如WS-*等)开发SOA的分布式软件系统,再使用Socket就不合适了,那会大大地增加开发的工作量和难度,WCF更适合于解决这个问题。在实际开发中,我们还可以混用WCF和Socket。比如我们可以基于WCF开发P2P的应用程序,使用NetPeerTcpBinding在P2P节点间“广播消息”,然后,在两个P2P节点之间直接使用Socket“私下”里传送一个“秘密”文件。

分享到:
评论

相关推荐

    基于WCF多线程的SOCKET文件传输服务

    **基于WCF多线程的SOCKET文件传输服务** 在软件开发中,文件传输是一个常见的需求,尤其是在分布式系统和网络应用程序中。WCF(Windows Communication Foundation)是微软提供的一种全面的面向服务的架构,用于构建...

    C# WCF 推送数据SOCKET并发完成端口例子完整实例源码

    3. **使用Socket进行数据传输**: 在WCF服务的实现中,可以创建一个Socket实例,连接到客户端的Socket。然后,利用Socket的`Send()`方法将数据推送给客户端。 4. **并发处理**: 为了处理大量的并发连接,你需要配置...

    WCF例子,双工,自动更新等

    在WCF上下文中,服务可能提供一个接口,客户端通过该接口检查是否有新的更新可用,如果有,则下载并安装。这通常涉及到服务端的版本检测逻辑以及客户端的更新逻辑,确保更新过程的顺利进行。 **描述中的“WCF ...

    C#大文件传输之SOCKET同步、异步、WCF同步、异步

    该示例,整合了C#文件传输中的SOCKET同步、异步、WCF同步、异步,并分别提供了进度条,以便查看各类传输的效率(SOCKET同步>SOCKET异步>WCF同步>WCF异步)。 运行的时候,需要自己添加一个可供传输的文件。可查看...

    WCF,SOA讲述.ppt

    该PPT主要描述什么引入什么是WCF,什么是SOA?基于SOA的服务框架WebServices,比较偏向应用,不太实用,可作为了解概念

    目前.NET最强SOCKET框架组“北风之神”(ZYSOCKET) 3.0 源代码

    朋友你还找用WCF,分布式?传统的SOCKET? 我告诉你 你OUT了 因为现在开始你要使用 “北风之神”了 你还在为组合数据包 头痛吗? 你还在为性能不达标 烦恼吗? 现在不必了,因为 使用我的 吹着北风 而构思出来 的...

    wcf服务 winform宿主 客户端请求wcf 示例

    首先,我们有`WcfServiceLibrary1`项目,这是一个WCF服务的实现。在WCF服务中,你需要定义一个服务接口(IService1),并在接口中声明你要提供的操作(方法)。然后,实现这个接口的类(Service1),这将是服务的...

    WCF

    Windows Communication Foundation(WCF)是微软.NET Framework中的一个核心组件,用于构建分布式应用程序。它提供了一种统一的方式,用于创建、部署和管理跨进程、跨网络的服务。WCF集成了多种通信技术,如Web服务...

    WCFService可以通过web调用和WCF服务访问

    Windows Communication Foundation(WCF)是微软.NET框架的一部分,它提供了一种统一的编程模型来创建分布式应用程序服务。WCF服务可以被多种客户端访问,包括基于Web的和传统的WCF客户端。在标题和描述中提到的...

    wcf 代理 wcf开发示例

    WCF(Windows Communication Foundation)是微软.NET框架的一部分,它提供了一种用于构建分布式应用程序的强大而灵活的服务模型。在WCF中,代理是一个重要的概念,它充当客户端与服务之间的桥梁,使得客户端可以调用...

    WCF简单的应用

    **WCF简单的应用** Windows Communication Foundation (WCF) 是微软.NET框架中的一种全面的服务导向架构,用于构建可互操作的分布式应用程序。它整合了多种通信技术,如Web服务、消息队列、Remoting等,为开发者...

    WCF入门教材 C#

    **WCF(Windows Communication Foundation)**是微软.NET框架下的一个组件,主要用于构建分布式应用程序,它提供了服务导向架构,使得应用程序可以跨多个系统进行通信。WCF整合了多种通信技术,如Web服务、Remoting...

    WCF系列课程 webcast

    - WCF提供了丰富的诊断工具和日志功能,包括消息日志、跟踪、性能计数器等,有助于问题排查和性能优化。 9. **WCF与WebAPI和ASP.NET Core** - 随着WebAPI和ASP.NET Core的出现,WCF在现代Web开发中的地位有所下降...

    JS跨域调用WCF服务实例(WCF服务宿主到控制台)

    JavaScript(JS)与Windows Communication Foundation(WCF)服务之间的跨域调用是Web开发中常见的需求,尤其是在构建分布式系统和前后端分离的应用时。本文将详细介绍如何实现JS跨域调用WCF服务,并通过一个控制台...

    WCF客户端测试工具,亲测可用

    标签中的“测试WCF链接”是指该工具可以检查客户端与服务之间的网络连接是否畅通。在开发或维护阶段,这一步骤是必不可少的,因为网络问题可能导致服务不可用或者通信延迟。通过工具进行测试,可以快速定位并解决...

    WCF PDA开发资源 WCF Guidance For Mobile Developers

    **WCF PDA开发资源:WCF Guidance For Mobile Developers** Windows Communication Foundation (WCF) 是微软推出...它不仅提供了理论知识,还包含了实际操作的指导,有助于开发者快速掌握WCF在移动环境下的应用技巧。

    C++调用WCF完整示例

    在IT行业中,C++与Windows Communication Foundation(WCF)的结合使用可以实现高效、安全的分布式应用程序。本文将深入探讨如何在C++中调用WCF服务,通过一个完整的示例来阐述整个过程,帮助开发者更好地理解这一...

    VB6中访问WCF 示例代码

    在VB6中访问WCF(Windows Communication Foundation)服务是一项技术挑战,因为VB6不直接支持WCF的现代通信协议。然而,通过使用一些特定的工具和技术,如Soap Toolkit 3.0,我们可以实现这一目标。以下是一些关于...

Global site tag (gtag.js) - Google Analytics