用ASP和COM+进行联机订购

     我们已经了解事务,并知道如何由ASP进行操纵,下面举个例子。本节将以定义一个商业要求及其相关的需求开始,然后通过使用ASP和COM+的事务来设计和实现。
19.5.1 业务需要
    在这个例子中,业务需要是订单处理系统的前端部分。订单处理系统要生成订单,同时也要调整库存数量。每次接受订单,都要正确地调整库存数量,这一点非常重要。
    由于这个例子由两个任务组成(产生订单和调整库存数量),将这些任务放在一个单独的事务中是必要的。这样就能利用COM+的功能。COM+能为该事务提供所有的主要工作,我们所要做的仅仅是告诉COM+提交或终止事务。
19.5.2 设计
    这个例子能分解为典型的三层结构,而且也适合Microsoft的DNA结构。在高层,这个例子是一个ASP用户界面(UI),在这里查看在SQL Server 7.0数据库中的各种产品。但是, ASP代码不与数据库交互,它利用COM组件从未连接的记录集窗体中检索数据。
    通过ASP用户界面检索订单,该ASP用户界面调用一个事务性COM组件,这个COM组件把订单插入到数据库中,同时也调整库存数量。
    1. 数据服务
    如上所述,数据库将驻留于SQL Server 7.0中。选择SQL Server的原因是它支持COM+( DTC)事务。如果需要的话,也可以使用SQL Server 6.5。
    在这个例子中有两个表,一个是产品表,另一个是订单表。为了简单起见,在称为ASP Transactions的数据库中使用的表名分别是Orders和Products,表的结构分别如图1 9 - 1 4和图1 9 -1 5所示。

    应该在Products表中加入一些样本数据,以便能返回到ASP页中。
    大多数应用程序建立在更复杂的数据库设计上,其数据库含有存储过程、触发器和调度的任务等。然而,作为一个示例,上述表已经足够充分了。

    我们已经在本书可下载的源代码中提供了脚本,这些脚本可以创建这些数据表,并把一些数据插入到Products数据表中。
    2. 业务逻辑
    这个例子的业务逻辑将封装在一个由VB建立的ActiveX DLL中。该DLL含有两个类:一个类能给调用者提供检索可用产品列表的能力,另一个类提交订单。检索产品列表的类是非事务性的,而更新列表的类是事务性的,以确保同时改变两个表。
19.5.3 实现
    现在打开VB并创建新的ActiveX DLL项目。在VB中,设置项目的名字为ASP Trans,缺省类的名字设置为Order。增加一个类模型,称为Products。
    如果希望能在Order类中设置MTS TransactionMode为2-Requires Transaction。当Order类被放入COM+时,它将自动地把组件的Transaction Support 属性设置为Required。记住,只有从Add File对话框把组件加入到一个COM+应用程序时,这种缺省设置才会生效。
    在类中加入代码之前,必须首先设置正确的引用,在References对话框中,设置的引用为Microsoft ActiveX Data Objects 2.5 Library和COM+ Services Type Library,如图1 9 - 1 6所示。

    现在可以把代码加到这些类中了。
    1. 产品组件
    首先在Products类中增加一个名为GetProducts的函数。GetProducts方法没有参数,并返回一个未连接的ADO记录集。

    接着,添加所有错误处理、提交或终止事务的代码。要注意的是这个函数仅返回数据,不更新任何资源。然而,我们仍想使用环境来通知COM+收回这些资源:


    新增加的代码完成了GetProducts函数,它对Products数据表执行一个普通的SELECT语句。
    注意客户端指针的使用与服务器端指针完全不同。当使用未连接的记录集工作时,必须使用客户端指针;它通知ADO立刻获取所有的数据,而不是一次读取一点数据。一旦检索到数据,代码断开记录集,并把值返回给调用者。
    2. 订单组件
    接着,建立处理用户订单的方法。这个方法命名为PlaceOrder,是一个普通的子程序,要求有四个描述订单的参数。PlaceOrder不是一个函数,也不返回值。

    PlaceOrder要求的四个参数是使用者姓和名、产品的I D和数量。PlaceOrder程序将完成两个主要的事情:在Order数据表中增加一条记录和为产品调整库存数量。
    下面增加错误处理和事务支持代码。像其他的方法一样,如果出现错误,将转入Error_Handler部分,并回滚事务;如果没有出错,将提交事务:


    现在,增加代码在Orders数据表中插入一条记录,并调整产品库存数量。这可以简单地通过创建一个ADO Connection对象并执行一条INSERT语句和一条UPDATE语句来完成。下面的代码可以显式地与一个ADO Command对象一起被执行,但是为了简单起见,这个例子仅仅使用了一个ADO Connection对象:

    上述是ActiveX DLL所需的所有代码。对这个商业逻辑来说,剩下的只是编译D L L并将它安装到COM+应用程序中。
    在COM+中安装DLL时,记住调整Order组件中的Transaction Support属性,以通知COM+在调用时要求一个事务。在Transactions选项卡中,把设置调整为Required,如图1 9 - 1 7所示。

    应该将Products组件的Transaction Support属性配置为Not Supported,因为它对数据库执行只读操作。
    3. 用户界面
    在这个例子中的用户界面非常简单,由两个页面组成:一个收集用户订货信息;另一个提交订单,并通知用户其订单是否被成功地接受。
    Orders.ASP页向用户显示各种产品,允许他们生成一个订单。首先向该页增加一个包含订单输入控件的窗体:


     接着,增加代码调用ActiveX组件和检索产品列表,这通过使用Server对象的CreateObject函数创建这个类的实例来完成。一旦建立了对该类实例的引用,代码就可以检索记录集,并在一个列表框中显示内容:


    现在有了捕获用户输入的ASP页面,剩下的工作是处理订单。这通过另一个称为PlaceOrder. ASP的ASP页面完成。PlaceOrder. ASP是一个事务性ASP页面,它调用ActiveX DLL中的PlaceOrder例程。PlaceOrder例程通过在数据库中增加订单记录并调整产品库存数量来更新数据库。下面开始增加PlaceOrder.ASP页面,在页面顶部设置Transaction指令,并增加On TransactionCommit和OnTransactionAbort例程:

     下面,填写事务例程代码,告诉用户订单请求的结果。为了做到这一点,在例程中插入Response.Write语句。


19.5.4 程序验证
     验证一下这个例子。把一组订单增加到系统中。打开SQL Server,观察Orders数据表中的记录,如图1 9 - 1 8所示。

    为了验证事务处理过程,再次打开Component Services MMC插件,并选择所要求的计算机中的Distributed Transaction Coordinator节点下的Transaction Statistics节点。事务统计监视器侦听D T C提交和终止事务,并且显示汇总结果,如图1 9 - 1 9所示。

    本章阐述了事务处理的概念以及如何在IIS应用程序中通过使用Windows 2000的组件服务( COM+ )来操纵事务。
    Microsoft已经为开发者提供了一系列强有力的服务,应用程序可以使用这些服务创建。这些服务,例如事务处理(DTC),允许开发者集中精力解决业务问题,而不必担心服务之间的底层通信。

时间: 2024-10-31 11:03:35

用ASP和COM+进行联机订购的相关文章

GridView 无法显示!

问题描述 <asp:GridViewID="GridView1"runat="server"AllowPaging="True"AutoGenerateColumns="False"DataKeyNames="OrderID"DataSourceID="SqlDataSource1"Height="103px"Width="429px">

订购东西 - asp实例

订购东西 - asp实例 - 下吧学习 日期:2004年8月17日 作者: 人气: 111 请选择你所要订购的水果 苹果 香蕉 菠萝 桔子 你没有订购水果 源码: <%@ Language=VBScript %><HTML><TITLE>订购水果</TITLE><BODY> 请选择你所要订购的水果<hr><FORM ACTION="order.asp"><input name="frui

在 ASP.NET 中执行 URL 重写

asp.net|执行 Scott Mitchell 4GuysFromRolla.com 适用范围: Microsoft ASP.NET 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写.URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况. 下载本文的源代码. 本页内容 引言 URL 重写的常见用法 请求到达 IIS 时将会发生什么情况 实现 URL 重写 构建 UR

ASP视频教程:制作关于我们和联系我们页面

大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了ASP视频教程:制作在线订购页面,本讲主要讲述制作关于我们和联系我们页面.大家请看视频教程.

ASP.NET MVC中使用Unity Ioc Container

在MVC中,控制器依赖于模型对数据进行处理,也可以说执行业务逻辑.我们可以使用依赖注入(DI)在控制层分离模型层,这边要用到Repository模式,在领域驱动设计(DDD)中,Repository翻译为仓储,顾名思义,就是储存东西的仓库,可以理解为一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合.使用依赖注入(DI)就是对Repository进行管理,用于解决它与控制器之间耦合度问题,下面我们一步一步做一个简单示例. 安装Unity 首先我们需要新建一个UnityMVCDemo项目

ASP中Session的运作原理

写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便.但是你真的知道 Session 的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象.虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了. 首先来讲讲 Session 的好处,它可以用来记录客户端私有的资料变量,并且在时间范围内不会消失.这真的是很重要的功能,尤其是有会员的系统必须要用到的.像是会员的登入帐号.时间.状态以及许许多多该记录的实时

ASP初学者参考!

参考|初学|初学 常见缩略词全写及中文含义 WWW----World Wide Web(万维网)URL----Uniform Resource Locator(统一资源定位符)HTTP----Hyper Text Transfer Protocol(超文本传输协议)HTML----Hyper Text Markup Language(超文本标记语言)XML----Extensible Markup Language(可扩展标记语言)ODBC----Open DataBase Connectivi

ASP设计常见问题及解答精要(3)

解答|设计|问题 17.问题:在ASP中使用ADO的AddNew方法和直接使用"Insert into..."语句有何不同?哪种方式更好? 答:ADO的AddNew方法只是将"Insert into "语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为它减少了ADO的"翻译"时间,由于SQL语句所执行的操作是直接在数据库服务器中进行的,尤其在数据量很大的时候有显著的优势. 18.问题:为什么我在A

三种Web开发主流技术的评价之ASP

web|评价|主流 三种主流技术是哪三种呢?我主要讲一下ASP(ActiveX Server Page).PHP.Java这三种技术.主要是基于我到现在已经使用的以下产品而谈: ASP:MS IIS 4/Visuale Interdev 6 PHP:Apache 1.2.x/HomeSite 4.5/PHP 4 Java:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2 以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对