c#

位置:IT落伍者 >> c# >> 浏览文章

.NET重要技术思考-DCOM 的技术


发布日期:2021年01月20日
 
.NET重要技术思考-DCOM 的技术

从 COM(Component Object Model) 时代到 DCOM(Distributed COM) 微软扮演了一个推动者的角色如果说 COM 提供了一个 Windows 平台上的对象通讯技术并且逐渐成为应用程序之间彼此通讯及互动的技术主流那么 DCOM 则是解决了计算机的通信和互动技术

COM 的着眼点是在于同一台计算机上不同应用程序之间的通讯需求跨到另外一台计算机之外就不是一开始 COM 所设想到的领域所幸跨程序的通讯和跨计算机的通讯差异仅在于通讯协议的处理 ( 也就是定位问题 ) 对于数据交换上型别差异的处理并不会因此而有区别所以要让 COM 的环境能更进一步延伸到跨计算机的领域只要妥善解决计算机定位的需求就有机会克服同样幸运的是 COM 在一开始的设计中完全不去碰触跨计算机的问题使得要在 COM 的架构之上再架上一层跨计算机的处理环境并不会去破坏到原本的架构于是 COM 的网络延伸版本 DCOM(Distributed COM) 就此出现专责让 COM 组件可以在网络环境下持续提供服务 DCOM 最主要处理的是两个议题第一个议题是网络通讯能力第二个议题则是权限的问题之前 COM 是在同一台计算机中找特定的组件而 DCOM 则要更进一步去找网络上的某台计算机之后沿用 COM 的机制找到计算机上的组件

到了 NET 当中跨计算机的问题同样也需要对应的技术进行处理 NET Remoting 就是一个对应于 DCOM 的技术它让存活在不同应用程序域 (AppDomain 一个 NET 中的新概念 ) 不同执行程序以及不同计算机上的对象能够顺畅的进行沟通协作在累积了长期以来分布式应用的经验之后微软没有理由把东西设计的更难用从某种意义来说 NET Remoting 提供了比过去更易于使用的开发架构用来来支持跨计算机的沟通作业省却开发人员建立分布式应用程序时必须花费的心力不过这样一个出色的分布式应用应用框架并没有得到本来应该得到的待遇相对于 Java 的 RMI 而言它更加简单同时保持设计方面的弹性同时摈弃了 DCOM 的一些缺点在对于一个前后端必须以有状态紧密结合方式进行互动作业同时又期望呼叫和数据交换的动作上能以最有效的方式进行的环境而言 NET Remoting 是一个比较恰当的选择方案

可是问题在于微软本身对于 XML Web Services 的狂热推崇让 NET Remoting 迷失了本来属于它自己的阵地也就是说 XML Web Services 的过火让 NET Remoting 忘记了自己应该承担的角色于是在开发者眼中成为了一个可有可无的作品至少对于很多开发人员而言在需要创建分布式应用程序的时候首先考虑的是 XML Web Services 而在于企业内部应用特别是在可以控制服务器和客户端平台的情况下(比如完全基于 NET 平台的应用) Web Service 因为效率等等各个方面的原因并无法体现出优势从技术本身来讲 NET Remoting 是一个非常出色的架构但在商业方面这是一个失败毕竟设计一个出色的产品然后束之高阁难免不像话

NET Remoting 恰恰是这个战略的牺牲品虽然拥有与生俱来的优点不过依然生不逢时

Enterprise Services

从一个很直接的感觉来说 Enterprise Services 只是对于 COM+ 的一个包装从使用方式和技术实现本身而言和 VB 或者 VC 下使用 COM+ 服务没有本质的区别而更多的只是在于多了一层托管代码的包装NET 开发人员能够比较顺利的使用这些服务的功能

相对于 JEE 平台上的应用服务器如 BEA 的 WebLogic IBM 的 WebSphere 或者开放源代码的 JBoss 微软是希望能够在企业级应用之中分一杯羹可是因为先天不足的原因在企业应用中需要的事务负载平衡故障转移等等技术中的表现不是那么尽如人意至少缺乏非常清晰的应用服务器( Application Server )的概念虽然微软不止一次的强调操作系统本身就是一个应用服务器一个 IT 信息的基础结构但是从开发人员实际的使用来看这是一个晦涩难懂的产品

虽然 NET Framework 改变了很多东西但是作为企业级应用中最重要的支撑技术——事务和服务并没有得到同等程度的发展我想这个也就是很多大型企业应用目前不选择 NET 的一个理由吧毕竟从 MTS —— COM+ —— Enterprise Services 这一路走来微软始终不是提供一个非常透明的机制让开发人员去控制各个环节(可能和微软一贯以来的策略有关只是关心最广泛的应用而不是最高端的应用)NET 中的所谓企业服务和竞争对手提供的相当的 EJB 还是有比较大的差距这是一个日前的微软无法解决的软肋

Web Service

从一开始微软就将其作为重头戏推出并且饶有意思的增加了 XML 然后那个 XML Web Services 就成为了 NET 战略中一个非常重要的术语就如微软的白皮书所言 Microsoft? NET 是 Microsoft XML Web Services 平台微软通过 NET 来改变现有的互联网络结构 Windows 正在走向过去这样的宣传是在于希望各个子系统之间的通信完全基于 Web Service 那样的话作为 Win 开发人员一直困扰的组建注册分发等等一系列问题都能够得到解决并且能够用更多的语言更多的平台去开发应用

一切皆是 Web Service 这是一个冒进的举动至少对于 年以前的世界而这四年以来虽然 Web Service 有很多很多的优点可以让我们歌功颂德但是不是万金油比如一直称垢的性能和安全问题也阻碍了 Web Service 一统天下于是其他分布式应用架构在特定的领域依然能够有自己的生存空间

这一次微软高估了 Web Service 虽然目前的 NET 是实现 XML Web Services 最好的平台 Visual Studio NET 也提供了从上至下的包装让开发人员完全可以不关心协议的底层实现比如 SOAP 比如对象序列化比如 WSDL 因为一切的一切都可以在 IDE 中自动完成我们不否认因为 NET Web Service 从概念已经走进应用而 WSE 的出台更加 Web Service 具备了互操作能力不过依然无法改变开发人员的观点只有在企业外网应用集成或者内部异种平台整合的时候才能够体现出优势在于需要高度响应和服务支持的应用方面 Web Service 只是一个臆造的神话

ASPNET

我们无法否认这项技术对于开发人员而言是一个颠覆性的改变从静态的 HTML 到 CGI 再到 ASP/JSP/PHP 时代我们都必须去了解 HTML 了解 HTTP 对于高水平的开发人员而言需要掌握的还远远不止这个在脚本横行的时代我们必须很清楚的去了解实现的各个细节包括 HTML JavaScript CSS 还有和服务器相关的 Request Response 最直接而言开发人员必须严格控制所有 HTML 及其相关内容的产生脚本带来的只是一个相对于 CGI 层次更加高级的自动化罢了

然后 ASPNET 将这一切完全改变 WebForm 让 Web 开发人员能够和 Windows 开发人员一样处理页面事件同时可以完全的访问强大的 NET Framework 类库而且预先编译机制解决了 ASP 一直以来的效率低下问题而在服务器端的设计在原先 ISAPI 的基础上从新实现了 HttpHandler 和 HttpMoudle 从而为开发人员提供了高度扩展的可能而日前比较成熟的 WebLog 引擎 Text 正是这些技术的经典之作

XML Web Services 的内置集成则使 ASPNET 成为 Web Service 应用的最好实现日前市场上相当大部分的 Web Service 都是基于 ASPNET 的在这点方面 ASPNET 已经远远超出 Java 社群的技术包括 JSP 包括 Struct 包括 JSF 还有其他相关的 Web 应用技术在 ASPNET 都能够得到非常好的集成

我们不可能否认这个事实相当大一部分(我个人认为是大部分)的开发人员转向 NET 是因为 ASPNET 对于 ASP 开发人员而言 ASPNET 提供了更加强大的功能很多在 ASP 中必须依赖组件技术来解决的问题比如文件上传在新的平台上已经成为内置支持当然更加重要的是依赖 Visual StuioNET 强大的集成开发环境能够成倍的提高生产率而另外平台的开发人员转向 ASPNET 我想也是因为弹性的设计及其便捷的开发我相信没有太多人会怀疑 ASPNET 已经走在 Web 开发的最前沿

当然任何事情没有绝对的完美NET Framework ( 也就是 NET 的第二个版本 ) 之前太多的 Postback 也是让开发人员抱怨之处而且采用 WebForm 的开发方式让很多开发人员不是那么容易的处理客户端脚本所有的事件实现都是依赖于 ViewState 因此在低带宽下的网络应用不断地提交也让有些用户感到恼火

这个世界没有绝对的完美但是会一点一点走向完美也许 ASPNET 就有太多东西值得期待

ADONET

相信大家不会忘记 ADO ( ActiveX Data Object ) 我想 Windows 上面数据库开发流行它功不可没通过统一的接口来实现对于数据库的访问从而屏蔽复杂的数据库访问协议而到了 NET 时代 ADONET 进一步将数据访问进化不要以为 ADONET 只是 ADO 的一个升级在 ADO 的技术上提供了一个托管类库除了都是数据访问框架其他没有太多本质的关联

虽然 ADONET 带来的震撼远远不如其他技术可依然有很多东西值得我们去欣喜毕竟创新总是一件好事情何况是这个最成功的软件公司带来的创新那么我们就来看看到底带来了什么

.除了提供了传统 ADO 的 ConnectionCommand 以外我们意外的没有看到 Recordset 这样的对象而是提供了 DataReader 用来处理向前滚动的数据访问最最重要的是加入了 DataSet 这样的概念因为如此我们能够实现很多数据库应用中需要的 Disconnected Application 能够实现 InProcDatabase 而这一切通过 DataSet 能

上一篇:如何在Visual Basic中使用导入API

下一篇:.NET Framework不同组件区别及安装