帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP编程
与COM+进行接口
作者:佚名 发布时间:2005-04-02 来源:不详
 

   特别应当注意:Visual C++向导仍采用术语“MTS”,Visual C++头文件和静态库名称中仍含有“mtx”。因此,本节中我们使用术语“MTS/COM+”,而不只是“COM+”。
    Visual C++在两个方面提供MTS/COM+支持:一是在创建项目时,二是在项目中使用指定的组件时。
    首先来看一下MTS/COM +对于项目的支持。当编译和链接项目时,便转换为DLL或EXE。在项目中使用MTS/COM+服务时,必须链接指定的库。Visual C++ AppWizard可帮助完成此项任务。
    在你第一次创建项目时,可能已注意到了Support MTS复选框,如图18 - 5所示。

    如果选定此复选框,不会产生附加代码,但向导改变项目设置使其“启用COM+”。特别是,向链接线增加了mtx.lib、mtxguid.lib和delayimp.lib库。因此,如果没有对上述复选框进行选定,仍可通过如图1 8 - 6所示的方式在链接线中添加这些文件名,使现有的组件“启用COM+”。

    另一个选择是创建启用COM+的组件。当在项目上添加一个新的ATL组件时,选择MS Transaction Server Component,如图1 8 - 7所示。

    单击属性页将出现图1 8 - 8所示的内容。

    创建MTS/COM+对象时,向导将在项目中添加代码,下面看一下这种配置产生的附加代码。
    在新组件的头文件中,你可看到增加了一个包含文件:
    #include <mtx.h>
    和用于ASP内置对象的包含文件类似,此文件包含在C++组件中使用MTS/COM+组件所需的常数和定义。组件中头文件还有一处改变:
    DECLARE_NOT_AGGREGATABLE(CTableStorage2)
    MTS/COM+对象不能作为其他对象集合体的一部分使用。因此,必须插入代码防止这种情况发生。
    如果不使用AppWizard创建组件,使组件“启用COM+”是非常容易的。如果选择IObjectControl支持,应该在项目中插入下列附加代码。组件的头文件中也有些改变。
    首先,组件继承IObjectControl接口,因此它必须实现该接口定义的方法:


    确保向导声明了IObjectControl的方法和ObjectContext的指针。

    向导在源文件中实现这些方法。当第一次使用对象时调用Activate方法,并自动生成ObjectContext的指针。

    如果选择IObjectControl支持,而没有缓冲对象,CanBePooled方法将返回FALSE:

    后面将详细讨论对象缓冲问题。最后,当对象不再使用时,将释放对IObjectContext的引用。

    对于服务器组件,有许多MTS/COM+接口可用。下面以IObjectContext接口为例进行讨论。
18.2.1 IObjectContext的事务处理
    每个MTS/COM+对象均有相应的环境。环境隐含着与对象相关的状态,包含对象的执行环境信息和参与的事务的信息。
    IObjectContext可完成下列功能:
    ? 声明工作完成。
    ? 不允许提交暂时的或永久的事务。
    ? 在当前事务范围内开始新的MTS/COM+对象。
    ? 检查调用者的角色。
    ? 检查安全性。
    ? 检查事务状态。
    在前一节中,组件已经有一个对IObjectContext接口的引用。我们将实现Clear方法,从组件中删除所有数据。对ITableStorage2接口添加一个不带任何参数的Clear()方法,用下列代码填写此方法的主体中:

    这个方法的目的是删除组件中的所有数据。必须检查ObjectContext的引用是否确实存在。如果在COM+以外使用组件,这个指针的值不存在,进行引用会引起组件崩溃。在这个例子中,调用SetComplete方法告诉COM+“不再保持状态,可以释放。”
    18.2.2 IObjectControl的对象缓冲
    IObjectControl接口用于对象缓冲,可增强应用程序的性能。当超出对象的使用范围时,被缓冲的对象不会真的破坏,只是处于无效状态。当请求这种类型的对象时,可以重新使用这个对象,组件被循环使用。性能增强的原因是当一个对象无效时,对象没有完全损坏,因此就不需执行很多工作。同样,激活一个无效对象也不需执行很多工作。
   在创建MTS/COM+对象时,对象缓冲可通过ATL Object Wizard Properties对话框启用,如图1 8 - 9所示。

    注意Can be pooled选项只能在选定Support IObjectControl后才能选定。另一种方式是将CanBePooled方法中的返回值改为TURE:

    使用对象缓冲所需做的工作仅此而已。
    上面讲述了组件如何与ASP和COM+相互作用,下面我们讲述组件如何访问永久性数据。

 
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息

   栏目导行
  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个观点
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统