有了WCF,Socket是否已人老珠黄?2010-12-25 16:58 by 田志良, 659 visits
2011年03月15日
有了WCF,Socket是否已人老珠黄?2010-12-25 16:58 by 田志良, 659 visits, 网摘, 收藏, 编辑
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“私下”里传送一个“秘密”文件。
发表评论
-
高二牛津模块五Unit1复习资料
2012-01-20 11:55 497高二牛津模块五Unit1复习资料 2011年10月27日 ... -
10财2会考成绩
2012-01-20 11:55 58410财2会考成绩 2012年01月17日 50 英语 1 ... -
2011-09-03
2012-01-20 11:55 5252011-09-03 2011年09月03日 本篇是制作 ... -
“书香校园”读书知识竞赛试题(四)
2012-01-20 11:55 609“书香校园”读书知识竞赛试题(四) 2010年11月01日 ... -
89140507的主页
2012-01-20 11:55 89189140507的主页 2011年10月02日 重要 ... -
安全bios手册(2)
2012-01-19 16:44 629安全bios手册(2) 2010年06月20日 BIOS ... -
电脑里面英文系统的中文简介
2012-01-19 16:44 801电脑里面英文系统的中文简介 2010年06月22日 BO ... -
PHOTOSHOP初学者成长教材
2012-01-19 16:44 594PHOTOSHOP初学者成长教材 ... -
各大软件公司笔试题
2012-01-19 16:44 1155各大软件公司笔试题 2011年10月23日 网易游戏20 ... -
linux 客户端 Socket 非阻塞connect编程(转)
2012-01-17 06:29 898linux 客户端 Socket 非阻塞connect编程(转 ... -
[转]linux非阻塞式socket编程之select()用法
2012-01-17 06:29 1640[转]linux非阻塞式socket编 ... -
面向连接的socket通信实现
2012-01-17 06:29 889面向连接的socket通信实现 2010年12月26日 ... -
TCP/IP SOCKET HTTP(转帖)
2012-01-17 06:28 635TCP/IP SOCKET HTTP(转帖) 2011年09 ... -
2011学习总结(二)感悟篇
2012-01-16 05:10 5392011学习总结(二)感悟篇 ... -
新东方英文讲座精华篇 5 -阅读、口语[转帖]
2012-01-16 05:09 524新东方英文讲座精华篇 5 -阅读、口语[转帖] 2011年0 ... -
超右脑学习~那个小日本滴~
2012-01-16 05:09 478超右脑学习~那个小日本 ... -
14个值得推荐的免费英文有声读物网站都是mp3格式可以下载的
2012-01-16 05:09 83614个值得推荐的免费英文有声读物网站都是mp3格式可以下载的 ... -
学好英语的39个要诀(2)
2012-01-16 05:09 551学好英语的39个要诀(2) ...
相关推荐
Litelog - WCF 项目应用连载[2] - 创建Lig日志系统 C# 源代码 【系列文章工程源代码】 WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample 序 WCF 项目应用连载[2] - 创建Lig日志系统 WCF 项目应用连载...
WCF 实例源代码------聊天室 WCF 实例源代码------聊天室
WCF 项目应用连载[12] - 附: Innerlig.cs 内部日志组件 WCF 项目应用连载[13] - 附: Lambda表达式、Linq查询与扩展方法 WCF 项目应用连载[14] - 附: 方法超时管理 - AsyncManager WCF 项目应用连载[15] - 附: ...
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 ----------------------- WCF 项目应用连载[2] - 创建Lig日志系统 源代码 http://blog.csdn.net/vivitue/article/details/9264551
具有证书身份验证的WCF传输安全性-使用MSTest V2进行测试验证 ( )帖子的示例,其中包含通过参数化测试进行证书身份验证的WCF传输安全性( 和 ) 这篇文章讨论了使用X.509证书进行服务器和客户端身份验证时,如何...
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 --------------------------- WCF 项目应用连载[3] - 双向通信 实例管理与服务端监控
Silverlight DataGrid使用WCF RIA Service实现Load-on-demand的数据加载.doc
迁移WcfToWebApi .NET Core控制台应用程序,可自动生成ASP.NET Web API服务和关联的客户端代码文件,以替换现有的WCF服务终结点。 C#的库用于解析/生成文件。安装克隆回购建立解决方案使用指定的参数从命令行运行...
WCF 是微软力推的通讯框架,它能够以 ASP.NET WebService 的方式实现 RESTful 方式的服务。但是缺陷是目前的版本不支持对 HTTP multipart 格式的自动解析。而不像传统的 ASP.NET WebService 可以自动解析 multipart ...
Apress Pro WCF 4 Practical Microsoft SOA Implementation, 2nd Part I: Introducing Windows Communication Foundation ■Chapter 1: WCF and SOA Basics ■Chapter 2: What’s New in WCF 4 ■Chapter 3: ...
By teaching you the why and the how of WCF programming, this book will help you master WCF and make you a better software engineer. Learn WCF’s architecture and essential building blocks, including...
基于WCF多线程的SOCKET文件传输服务
WcfServiceLibrary1--- wcf服务:生成dll文件给宿主引用 WinFormsWcfService--- 宿主 WcfClient---调用wcf服务客户端
wcf开发:WCF培训上课实例-带有宿主的WCF程序。WCF培训上课实例-带有宿主的WCF程序WCF培训上课实例-带有宿主的WCF程序WCF培训上课实例-带有宿主的WCF程序
C# WCF 推送数据SOCKE;T并发完成端口例子完整实例源码; C# SOCKET WCF PUSH 推送数据
WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--
WCF-Insurance.github.io:组件库
wpf-wcf-wf整合开发实例--有利于理解wpf-wcf-wf的整合
主要介绍了分享WCF文件传输实现方法---WCFFileTransfer,需要的朋友可以参考下