有了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 490高二牛津模块五Unit1复习资料 2011年10月27日 ... -
10财2会考成绩
2012-01-20 11:55 57610财2会考成绩 2012年01月17日 50 英语 1 ... -
2011-09-03
2012-01-20 11:55 5172011-09-03 2011年09月03日 本篇是制作 ... -
“书香校园”读书知识竞赛试题(四)
2012-01-20 11:55 593“书香校园”读书知识竞赛试题(四) 2010年11月01日 ... -
89140507的主页
2012-01-20 11:55 87989140507的主页 2011年10月02日 重要 ... -
安全bios手册(2)
2012-01-19 16:44 616安全bios手册(2) 2010年06月20日 BIOS ... -
电脑里面英文系统的中文简介
2012-01-19 16:44 791电脑里面英文系统的中文简介 2010年06月22日 BO ... -
PHOTOSHOP初学者成长教材
2012-01-19 16:44 584PHOTOSHOP初学者成长教材 ... -
各大软件公司笔试题
2012-01-19 16:44 1145各大软件公司笔试题 2011年10月23日 网易游戏20 ... -
linux 客户端 Socket 非阻塞connect编程(转)
2012-01-17 06:29 887linux 客户端 Socket 非阻塞connect编程(转 ... -
[转]linux非阻塞式socket编程之select()用法
2012-01-17 06:29 1632[转]linux非阻塞式socket编 ... -
面向连接的socket通信实现
2012-01-17 06:29 879面向连接的socket通信实现 2010年12月26日 ... -
TCP/IP SOCKET HTTP(转帖)
2012-01-17 06:28 626TCP/IP SOCKET HTTP(转帖) 2011年09 ... -
2011学习总结(二)感悟篇
2012-01-16 05:10 5352011学习总结(二)感悟篇 ... -
新东方英文讲座精华篇 5 -阅读、口语[转帖]
2012-01-16 05:09 519新东方英文讲座精华篇 5 -阅读、口语[转帖] 2011年0 ... -
超右脑学习~那个小日本滴~
2012-01-16 05:09 465超右脑学习~那个小日本 ... -
14个值得推荐的免费英文有声读物网站都是mp3格式可以下载的
2012-01-16 05:09 82414个值得推荐的免费英文有声读物网站都是mp3格式可以下载的 ... -
学好英语的39个要诀(2)
2012-01-16 05:09 540学好英语的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] - 双向通信 实例管理与服务端监控
WCF 是微软力推的通讯框架,它能够以 ASP.NET WebService 的方式实现 RESTful 方式的服务。但是缺陷是目前的版本不支持对 HTTP multipart 格式的自动解析。而不像传统的 ASP.NET WebService 可以自动解析 multipart ...
Silverlight DataGrid使用WCF RIA Service实现Load-on-demand的数据加载.doc
迁移WcfToWebApi .NET Core控制台应用程序,可自动生成ASP.NET Web API服务和关联的客户端代码文件,以替换现有的WCF服务终结点。 C#的库用于解析/生成文件。安装克隆回购建立解决方案使用指定的参数从命令行运行...
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文件传输服务
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:组件库
Learning WCF removes the complexity of using this platform by providing detailed answers, explanations and code samples for the most common questions asked by software developers. Windows ...
WcfServiceLibrary1--- wcf服务:生成dll文件给宿主引用 WinFormsWcfService--- 宿主 WcfClient---调用wcf服务客户端
Hailed as the most definitive treatment of WCF available, this relentlessly practical book provides insight, not documentation, to help you learn the topics and skills you need for building WCF-based...
wpf-wcf-wf整合开发实例--有利于理解wpf-wcf-wf的整合