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(Windows Communication Foundation)是微软提供的一种全面的面向服务的架构,用于构建...
3. **使用Socket进行数据传输**: 在WCF服务的实现中,可以创建一个Socket实例,连接到客户端的Socket。然后,利用Socket的`Send()`方法将数据推送给客户端。 4. **并发处理**: 为了处理大量的并发连接,你需要配置...
在WCF上下文中,服务可能提供一个接口,客户端通过该接口检查是否有新的更新可用,如果有,则下载并安装。这通常涉及到服务端的版本检测逻辑以及客户端的更新逻辑,确保更新过程的顺利进行。 **描述中的“WCF ...
该示例,整合了C#文件传输中的SOCKET同步、异步、WCF同步、异步,并分别提供了进度条,以便查看各类传输的效率(SOCKET同步>SOCKET异步>WCF同步>WCF异步)。 运行的时候,需要自己添加一个可供传输的文件。可查看...
该PPT主要描述什么引入什么是WCF,什么是SOA?基于SOA的服务框架WebServices,比较偏向应用,不太实用,可作为了解概念
朋友你还找用WCF,分布式?传统的SOCKET? 我告诉你 你OUT了 因为现在开始你要使用 “北风之神”了 你还在为组合数据包 头痛吗? 你还在为性能不达标 烦恼吗? 现在不必了,因为 使用我的 吹着北风 而构思出来 的...
首先,我们有`WcfServiceLibrary1`项目,这是一个WCF服务的实现。在WCF服务中,你需要定义一个服务接口(IService1),并在接口中声明你要提供的操作(方法)。然后,实现这个接口的类(Service1),这将是服务的...
Windows Communication Foundation(WCF)是微软.NET Framework中的一个核心组件,用于构建分布式应用程序。它提供了一种统一的方式,用于创建、部署和管理跨进程、跨网络的服务。WCF集成了多种通信技术,如Web服务...
Windows Communication Foundation(WCF)是微软.NET框架的一部分,它提供了一种统一的编程模型来创建分布式应用程序服务。WCF服务可以被多种客户端访问,包括基于Web的和传统的WCF客户端。在标题和描述中提到的...
WCF(Windows Communication Foundation)是微软.NET框架的一部分,它提供了一种用于构建分布式应用程序的强大而灵活的服务模型。在WCF中,代理是一个重要的概念,它充当客户端与服务之间的桥梁,使得客户端可以调用...
**WCF4高级编程**是针对Windows Communication Foundation (WCF)技术的一个深入学习资源,尤其关注第四版(WCF 4)的相关特性。WCF是.NET Framework中的一个关键组件,用于构建面向服务的应用程序,它提供了统一的...
**WCF简单的应用** Windows Communication Foundation (WCF) 是微软.NET框架中的一种全面的服务导向架构,用于构建可互操作的分布式应用程序。它整合了多种通信技术,如Web服务、消息队列、Remoting等,为开发者...
**WCF(Windows Communication Foundation)**是微软.NET框架下的一个组件,主要用于构建分布式应用程序,它提供了服务导向架构,使得应用程序可以跨多个系统进行通信。WCF整合了多种通信技术,如Web服务、Remoting...
- WCF提供了丰富的诊断工具和日志功能,包括消息日志、跟踪、性能计数器等,有助于问题排查和性能优化。 9. **WCF与WebAPI和ASP.NET Core** - 随着WebAPI和ASP.NET Core的出现,WCF在现代Web开发中的地位有所下降...
标签中的“测试WCF链接”是指该工具可以检查客户端与服务之间的网络连接是否畅通。在开发或维护阶段,这一步骤是必不可少的,因为网络问题可能导致服务不可用或者通信延迟。通过工具进行测试,可以快速定位并解决...
**WCF PDA开发资源:WCF Guidance For Mobile Developers** Windows Communication Foundation (WCF) 是微软推出...它不仅提供了理论知识,还包含了实际操作的指导,有助于开发者快速掌握WCF在移动环境下的应用技巧。
JavaScript(JS)与Windows Communication Foundation(WCF)服务之间的跨域调用是Web开发中常见的需求,尤其是在构建分布式系统和前后端分离的应用时。本文将详细介绍如何实现JS跨域调用WCF服务,并通过一个控制台...
在VB6中访问WCF(Windows Communication Foundation)服务是一项技术挑战,因为VB6不直接支持WCF的现代通信协议。然而,通过使用一些特定的工具和技术,如Soap Toolkit 3.0,我们可以实现这一目标。以下是一些关于...