欢迎光临
我们一直在努力

把NT 4.0下的ASP应用迁移到Windows 2000上(2.2)

建站超值云服务器,限时71元/月

visual basic 组件

将原有的visual basic 项目文件拷贝到新的开发环境中,用vb打开使用mts类库(mts.dll)开发的项目。检查项目使用的参考库,会发现mts类库已经被com+ services type library(comsvcs.dll)所代替了。

当microsoft visual basic创建新的com services组件的时候,它提供mts所有的函数。要确保这些函数能够被移植到windows 2000的组件正确的使用,microsoft给com services组件分配了和旧的mts组件完全一样的clsid。

基于visual basic的组件从表面上看是通过类型库的说明来访问mts的函数,但内部是通过clsid来访问的。在windows 2000中,基于visual basic的asp组件访问同样的函数,但是它通过新的com services组件。

作为将组件移植到新系统的测试,将vb中的项目文件不做任何修改进行编译,你会发现不仅编译过程没有任何的问题,而且在windows 2000中用asp页访问组件的表现也和在nt中是一样的—当然,这还要看组件的功用以及他访问什么样的外部进程。举例说,某组件实现objectcontrol以利用jit功能然后调用内建的asp response对象向客户端输出信息。

figure 8implementing objectcontrol

the response object instance

private m_oresponse as response

implementation of objectcontrol interface

implements objectcontrol

objectcontrol methods

private sub objectcontrol_activate()

dim ocontext as objectcontext

set ocontext = getobjectcontext()

set m_oresponse = ocontext("response")

end sub

for object pooling, required method

function objectcontrol_canbepooled() as boolean

objectcontrol_canbepooled = false

end function

cleanup

sub objectcontrol_deactivate()

set m_oresponse = nothing

end sub

use the response object instance

sub testresponse()

m_oresponse.write "hello windows 2000 world!"

end sub

在iis5.0中,将组件注册到component services并由asp页面访问的结果与在nt4中将组件注册到mts中的表现是一样的。注意,asp页面调用testresponse方法,它将激发jit调用objectcontrol activate方法,创建response对象输出“hello world”信息。

在两个操作系统环境中访问组件不同的地方在于组件在windows 2000中会较早的失效。windows nt4中只有在页面完全退出作用域时才被释放;在windows 2000中,组件在最后一个引用被释放时就释放了。因此,只要在asp页面中将组件的实例设为nothing(vbscript),vb的组件立刻就失效了。

当然,上面说的并不是asp组件在windows 2000和windows nt中表现不同的唯一的地方。如果组件原来用作调用windows nt特定的服务或执行某些操作,如输入/输出,windows 2000在实现上可能会有些不同,也就是说可能需要重写相关的代码来适应新的系统。不过,如果asp组件主要是使用某些技术(如activex data object–ado)访问数据库,这种情况受到的影响是最小的。

注意在windows 2000中开发组件和windows nt有一些不同,在windows nt中用visual basic(visual c++)开发注册到mts的组件时,每次编译后要刷新组件一次。原因是,vb(vc)会在组件(dll)生成后自动的注册一次。但是,visual basic创建的注册表实体会和mts为这个组件创建的注册表实体冲突。在重编译后通过在mts中刷新组件,会使mts修复相关的错误。

在windows 2000中,com+和mts并不是分割开来的,而被访问的组件通过visual basic或regsvr32.exe进行注册也是com+所支持的。com services仍然保留了refresh选项保持向后兼容性,但是已经不用在重编译后使用该选项。

谈到注册的问题,并不是非要重编译组件或者将它们添加到com+的应用中才能用asp访问,仍旧可以使用regsvr32.exe注册组件。使用regsvr32.exe注册组件或把组件添加到com+应用中唯一不同的com+考虑经配置的组件,而regsvr32.exe考虑未配置的组件。只要组件不使用事务处理和jit功能,他仍旧会工作的很好,而不管是如何注册的。

windows 2000中的visual c++组件

如果使用visual c++开发asp组件,platform sdk安装程序会把sdk类库和头文件添加到开发环境中,如图9。如在visual basic中一样,asp组件在visual c++中重编译的过程不需要或只需要很少的改变,这包括任何使用atl组件向导创建的asp或mts组件。

在使用visual c++ 6.0 atl 向导创建asp组件的时候,会使用scriptingcontext对象和onstartpage 和onendpage事件处理程序,以例示scriptingcontext对象、创建asp内建对象实例以及清除对象。microsoft保留这些引用主要是为了保证向后兼容性,而使得这些组件可以工作在windows 2000和iis 5.0环境下,

尽管scriptingcontext依旧存在,但是不要再继续使用它们进行开发工作。作为替代,应当使用其它的atl object wizard选项或者使用组件类库进行开发。请认真的考虑一下再将涉及scriptingcontext组件移植到windows 2000中,在未来该对象将不再被支持。

在使用atl object wizard创建mts组件时,会把mts类库和头文件加入到项目中。如下列代码会自动的添加到组件的头文件中。

#include <mtx.h>

在windows 2000中mts已经被com+替代,mts类库也被com service类库替代。那么,mts组件是如何成功的编译并工作呢?

答案很简单,打开platform sdk所附带的mtx.h文件就真相大白了:

// copyright (c) 1995-1999 microsoft

// corporation. all rights reserved.

#define __mtxspm_library_defined__

#include "comsvcs.h"

platform sdk所带的mtx.h文件其实就是com services头文件的包装文件。如果检查visual c++项目的外部相关性(external dependencies),你会发现comsvcs.h包含在列表中而不是mtx.h。这个文件也是为什么要把platform sdk的库和包含文件放置到visual studio安装的文件前面的原因之一,要确保组件选择了正确版本的头文件,比如mtx.h。

实际上你可以改变组件中的代码来不引用mtx.h:

#include <comsvcs.h>

这并不会影响到最终结果,在windows 2000中asp组件可以注册成为com+应用并由asp页面访问。

还是那句话,迁移过来的组件在windows 2000中拥有和nt4中一样的组件服务。但是,如果没有认真的考虑和广泛的修改,你并不能使用windows 2000 com+新的服务功能。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 把NT 4.0下的ASP应用迁移到Windows 2000上(2.2)
分享到: 更多 (0)