帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP编程
用ASP和COM+进行联机订购
作者:佚名 发布时间:2005-04-02 来源:不详
   我们已经了解事务,并知道如何由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),允许开发者集中精力解决业务问题,而不必担心服务之间的底层通信。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·用ASP实现聊天室中的在线答题游戏  (2005-04-02)
 ·巧用ASP生成PDF文件扣  (2005-04-02)
 ·用ASP编程实现快速查找  (2005-04-02)
 ·用asp怎样编写文档搜索页面  (2005-04-02)
 ·使用ASP加密算法加密你的数据  (2005-04-02)
 ·利用ASP制作EXECL报表方法  (2005-04-02)
 ·ADSI,使用ASP来实现通用的对数据  (2005-04-02)
 ·ADSI,使用ASP来完成NT管理  (2005-04-02)
 ·使用ASP实现基于WEB的数据库资料  (2005-04-02)
 ·用ASP自动生成SQL数据库的安装源  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·在ASP中使用数据库
·使用ASP脚本技术
·通过启动脚本来感受ASP的力量
·学习使用ASP对象和组件
·解析asp的脚本语言
·初看ASP-针对初学者
·ASP开发10条经验总结
·ASP之对象总结
·ASP与数据库应用(给初学者)
·关于学习ASP和编程的28个观点
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统