回复:从N层到.NET详细剖析原理
分布式通信
与 Windows DNA 相比,.NET 框架为应用程序的分布式部件之间的通信提供了更多选择,包括:
●。NET Remoting,提供 TCP 通道和 HTTP 通道;
●ASP.NET 支持在 .asmx 页中实现的、可通过 SOAP 调用的 XML Web services;
●与远程 COM 对象通信所需的 DCOM.
选项越多,意味着体系结构的选择也越多,这也意味着做选择时有更多需要考虑的因素。使用 .NET 框架创建分布式应用程序时要了解的体系结构问题包括:
●直接与远程 COM+ 对象进行通信要求使用 DCOM,而不能使用 .NET Remoting.由于 DCOM 的建立和使用都相当复杂,因此应尽量避免这种通信。在某些情况下,有必要通过托管代码处理现有的 COM+ 对象,尽管这样做所要求的 COM 互操作性会降低性能。
●。NET Remoting TCP 通道没有提供内置的安全性。与 DCOM 不同,它不提供严格的身份验证、数据完整性或数据保密服务。但它并非一无是处,TCP 通道比 DCOM 更容易配置。
●DCOM 不能很好地与防火墙配合使用,。NET Remoting HTTP 通道与之不同,它是专门为在 Internet 上进行有效通信而设计的。而且,由于可以使用 SSL,此选项能够为数据提供安全的路径。通常,对于 Intranet 通信而言,TCP 通道是较好的选择;而对于 Internet 通信,则更适合使用 HTTP 通道或 ASP.NET SOAP 支持。
●。NET Remoting HTTP 通道和用于 XML Web services 的 ASP.NET 支持都能实现 SOAP.但这两种实现却截然不同,各有其特定的目的。。NET Remoting 注重保持公共语言运行时的确切语义,因此当远程系统也运行 .NET 框架时,它是最佳选择。ASP.NET 则注重提供绝对标准的 XML Web services,因此当远程系统是基于 .NET 的平台或任何其他平台时,它是最佳选择。而且 ASP.NET 比 .NET Remoting HTTP 通道的速度快。但 HTTP 通道也有优点,它允许通过引用和真正的异步回调来传递参数,这是 ASP.NET 中的 SOAP 支持所不具备的功能。
访问存储数据
ADO 能够方便地构建重型客户端,但客户端的伸缩性较差,ADO.NET 与 ADO 不同,它更适用于构建轻型客户端。ADO.NET 客户端使用仅向前的只读游标读取数据。它不支持有状态的服务器端游标,因此其编程模式鼓励短时间的连接。直接读取和处理数据的客户端可以使用 ADO.NET 的 DataReader 对象,它不为返回的数据提供缓存。或者,可以将数据读入 DataSet 对象中,将其作为从 SQL 查询和其他源中返回的数据的缓存。但是,与 ADO 记录集不同,数据集不能显式地维护与数据库的开放连接。
如前面所述,ADO 生成的重型方法还存在一些其他问题。这些问题可以在 ADO.NET 中解决,如下所示:
●对于将数据存储在数据集并要求访问由其他用户或应用程序所做的更改的 ADO.NET 客户端,需要包含显式代码才能进行这些更改。该代码通常还需要为每个所进行的检查打开一个数据库连接。
●尽管 ADO.NET 并不直接支持保守式锁定,但通过使用 ADO.NET 事务或在存储过程中实现所需的功能,客户端仍然可以获得同样的效果。
●与 ADO 不同,ADO.NET 不允许将部分查询结果保留在数据库中(可以使用服务器端游标从中进行访问)。虽然 ADO.NET 确实比 ADO 检索的元数据要少,但应用程序仍应设计为能够将所有的查询结果从数据库传递到 ADO.NET 客户端。
ADO.NET 中影响体系结构选择的另一项更改是其对处理分层数据(特别是 XML 文档)的支持增强了。将 ADO.NET 数据集转换成 XML 非常简单,就象访问 SQL Server 2000 的 XML 功能一样。因此,在 Windows DNA 中可能被强制装入关系模型中的分层数据现在可以以其原始形式提供访问。
将数据传递到客户端
将数据有效地传递到客户端对于在 .net 框架上构建的 N 层应用程序和使用 Windows DNA 构建的应用程序同样重要。一项重要的更改在于,ADO.NET 数据集可自动序列化成 XML,从而使得各层之间的数据传递更加简单。虽然在 Windows DNA 中也可以使用这种方法,但 .NET 使通过 XML 的信息交换变得更加简单、直接。