原文出自:
《Microsoft .NET Distributed Applications: Integrating XML Web Services and .NET Remoting》
Part II Chapter 10 Choosing the Right .NET Technology
在这本书中,我一直强调一个原则,那就是每一个.NET技术都有一个理想的应用环境。为了构建一个成功的分布式应用程序,你不但要理解如何使用这些技术,而且要知道何时使用这些技术。
内部和外部系统
内部系统是一个相对私有的软件,它管理着每日任务的某些部分,这些任务是商业运营中所必需完成的。它可以包括Bug跟踪功能、开发部门使用的项目管理软件,或者是客户销售跟踪和投资管理应用程序。在其中任何一个案例中,我们有两个选择:
基于.NET Remoting技术的解决方案可以提供最快的通讯速度。当然,内部系统通常并不会停留在这种方式上。如果该系统是成功的,你通常需要一种桥,用以向其他系统提供功能(接口)。由于这个原因,如果你需要开放一些功能给第三方软件,基于XML Web服务的解决方案提供一种简单的整合途径。XML Web服务还提供一些ASP.NET服务,例如缓存一个验证,这样可以提高运行效率或者简化编码。无论基于两种技术中的哪一种,客户端通常使用 Windows Form创建,它提供了一个十分灵活的用户界面,允许你创建不同的应用类型,例如一个长期运行的系统托盘程序。
提供给外部系统(例如电子商务商店)的功能可以依赖于ASP.NET或XML Web Service作为支撑。最关键的考虑是你是否需要使用离线架构,这种架构通过消息队列或者相似技术来实现客户请求的分配。如果你期望在高峰时间,有一个相对集中的大吞吐量,并且客户不需要即时的回应的话,这种离线架构使服务器的处理能力达到最大。
混合的内部/外部系统 一些系统把XML Web服务和.NET Remoting结合起来,它们把.NET Remoting用于内部客户,而把XML Web服务作为与第三方软件或平台通讯的接口。这个方式是否成功,取决于能否保证XML Web服务和远程组件使用相同的服务提供者(Service Provider)组件来完成一个类似于体重物的过程,例如访问数据库。尽管XML Web服务和远程组件相互独立运行,它们仍然共享相同版本的服务提供者组件,如图10-6所示。
图10-6注:技术上讲,创建一个具有XML Web服务和远程对象共同性质的组建对象是可能的。你只要从
MarshalByRefObject 派生一个类,从而允许提供.NET Remoting支持,并且添加<WebMethod>特性,创建一个.asmx文件来暴露Web方法。然而,这种方法是绝对不建议使用的。你仍然应该把组件独立开来。XML Web服务和.Net Remoting在处理问题上的微小差异,例如序列化,会为未来的开发增加麻烦。因此,我们应该把共享的功能放入独立的组件中。
通用的后端(The Common Back-End)
混合系统的弱点在于,对于大数据量加载效率很低。例如,XML Web服务和Remoting对象之间连接无法被池化;另外,由于我们处理的是两个重复的对象实现,负载平衡会变得十分复杂。
解决这个问题的一个方案是通过.NET Remoting 创建一个通用的后端处理组件,如图10-7所示。这个附加的层将导致附加的跨进程通讯,因此它会降低一小部分性能。然而,从长远来看这种结构更具有可伸缩性。
图10-7部分离线系统(Partially Disconnected System) 部分离线系统包含一些无法保持长期连接的客户端,因此无法总是与服务器端组件交互。例如,你可以创建一个用于记录经常出差的员工的开销的程序,当计算机重新连接到网络时,这些费用报表会被输入中央数据库。另一个离线系统的例子是一种分配给第三方的工具。比如说,你可以能会为一些已授权的商人提供销售订单工具。然而,你不能够假设这些商人在使用程序时能够一直连接在Internet上,你也不能假设他们能够连接到他们的内部网上。
在离线系统中,有不止一种方法可以用于通讯。一种方法是使用消息队列(如图10-8所示),在这个例子中,当连接恢复时,系统会自动发送消息,这种方法是有用的,它允许你使用与实时连接系统(Connected System)的客户端相同的设计来完成离线系统的客户端。无论在实时连接系统还是在离线系统中,一旦操作完成消息就会发出,唯一的差别在于Windows分发消息的方式。
图10-8
在其他一些案例中,你可能会因为特殊的需求需要开发一个定制的解决方案。你可以创建一个应用程序,该程序不断查询连接是否可用或者等待用户手动告诉程序是否有一个连接可用。这种方法同email程序的工作方式一样。如果你在离线状态下发送一个email信息,然后退出程序,重新连接,在你重新加载程序之前信息是不会被发出的。
一个最终的方法是创建一个专门的Windows服务,负责发送信息到中央服务的任务。这个服务将一直在计算机上允许,检查连接是否可用,如果可用,它会把存储在客户端的信息发送出去。这个方法概念上与消息队列类似。然而,你无法保证所有的客户端上安装了消息队列软件,并且被正确配置,这是非常常见的。
从COM升级
在当今世界,分布式系统通常都需要从一个已存在的COM架构演化而来,.NET使这个工作变得相对简单。从COM到.NET的迁移是主要的工作,但是必须遵循一条准则,那就是采用分阶段的方式以保证系统能够正常工作。对于大多数机构来说,这意味着在一个COM和.NET组件混合的系统上花费大量的时间。
当你升级一个传统的多层应用程序时,最好是从跟踪记录客户端应用程序开始,因为用.NET客户端与一个COM组件通讯要比用一个基于COM的客户端与. NET组件通讯简单得多。整合的第一阶段应该是使用ASP.NET或Windows Form重写表示层,如图10-9,你可以用.NET内建的COM交互支持来访问中间层的COM对象。
图10-9
由于客户端直接与COM层通讯,升级业务组件变得十分困难。另外,如果组件位于另外一台计算机上,你必须使用分布式COM(DCOM)来作远程通讯。下一个阶段则要把COM交互层放到服务器上,如图10-10所示。你可以通过使用XML服务或通过.NET Remoting开放出来的组件创建另一个.NET层,客户端直接和该层的.NET组件连接,该组件负责获得请求并从下层的COM组件中获得结果。
图10-10
最后一个阶段是使用.NET组件重建业务层,如图10-11所示。在最好的情况下,你应该可以一个一个部署你的这些组件,在客户端的代码不需要任何改动的情况下,你只需要更新.NET的XML Web服务层或者远程组件。
图10-11
分享到:
相关推荐
如何在Asp.Net1.1中实现页面模板(所谓的MasterPage技术) Tool Tip 示例(FILTER版) Tool Tip示例 (htc版) 一个.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的...
应用程序恢复也很简单:重新运行Docker容器就完事儿OK,从整体架构上看,我的选择即是如此而已,这样的选择当然不一定完全正确,但我觉得至少合适,仅供参考。下面附上本站点的整体架构图。作几点注解:三台VM位于同...
剩下的工作就有Personal Translator来完成了:系统会设置正确的语言路径,自动选择合适的主题域,然后翻译。一旦完成,系统会告诉你哪一部分还需要编辑――因为有源句子和翻译句子的同步显示功能,一项任务就这样...
该考试系统用Microsoft Visual Basic.NET进行开发,数据库采用SQL Server 2000。由于系统采用三层结构,即数据库服务器、Web服务器、客户浏览器,为了实现可用子网内的任何一台服务器作为数据库服务器的需求,本系统...
ChatGPT技术的核心思想是利用大量的自然语言数据,采用深度学习模型来进行预训练,从而让模型能够自动产生语言,即模型能够生成有逻辑和语法正确的文本、回答问题和翻译文本等。而这一过程是在没有任何手工干预的...
验证既可以检查拼写,也可以自动识别常见翻译问题,如截断或重叠的文本以及分配不正确的快捷键、加速键、存取键等。此外,Lingobit 还可以自动修复多数此类错误。 交换向导确保了管理人员、翻译人员和质量保证团队...
(9)具有阅读和翻译本专业英语一般科技资料并用英语进行简单交流的能力; 3.素质方面 (1)政治素质方面 具有较强的思想道德修养和马列主义理论基础,正确的世界观与人生观。热爱祖国,拥 护党的基本路线和方针...
2.ASP.NET 技术 本网站没有采用 ASP 技术,采用的是 ASP.NET 技术。相比 ASP 技术, ASP.NET 弥补了其诸多不足,比如意大利面型的程序开发方法,让维护的难度 提高很多,尤其是大型的 ASP 应用程序。
利用其内部的翻译记忆技术,Passolo 可以重用现有的翻译资源。即使某个程序不是用 Passolo 翻译的,它的文本还是可以被 Passolo 用来进行新项目的自动翻译。模糊匹配技术能搜索相似和精确匹配的文本,从而提高了翻译...
1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与 C#.6 1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 ...
中文翻译质量不错。 ########################【对于crocostone本人前面发的算法导论的资源的说明】########################### download.csdn.net/source/3109111和download.csdn.net/source/3109150是一套...
ChatGPT(全名:Chat Generative Pre-trained Transformer),是由OpenAI团队研发创造,人工智能技术驱动的自然语言处理 工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像...
这些翻译由我们的社区翻译贡献。 谢谢! 想要贡献吗? 参见 。 贡献 请注意,欢迎访问此存储库中有关技术问题的问题。 关于信件内容的投诉不在主题之列,将被删除-还有很多地方比开始发行要合适得多。 拉取请求可以...
即使结束标签不按照起始标签的逆序出现也是允许的,例如,This is a sample string是正确的。 5 某些特性要求必须包含值,例如中的src特性。 6 某些特性不要求一定有值,例如中的nowrap特性。 7 定义特性的...
PS:之前在wooyun上看了一些关于SQLMAP的文章,受益匪浅,今天翻译这篇文章,是希望对于如何使用SQLMAP提供一个基本的框架,SQL注入的原理以及SQLMAP详细的命令参数和不同的应用实例可以参考下面的文章: ...
近几年一直在跟踪.NET技术的发展,积极从事.NET技术文档和图书的翻译工作。 目录 封面 -12 封底 572 前言 -9 目录 -6 第1章 C语言编程 1 1.1 创建C程序 1 1.1.1 编辑 1 1.1.2 编译 2 1.1.3 链接 2 1.1.4 执行 ...