ASP服务器端组件=OLE automation server?(100分)

  • 主题发起人 主题发起人 yao_jun
  • 开始时间 开始时间
Y

yao_jun

Unregistered / Unconfirmed
GUEST, unregistred user!
除了OLE automation server ,ActiveX控件可以作为服务器端组件吗?
 
ActiveX本身就是一个Ole Automation Server, 当然可以做ASP服务端的组件。

本论坛的作者--yysun老师就自己开发了一些ActiveX服务器组件。请参考:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=113583
 
ASP服务器端组件=OLE automation server TRUE!
ActiveX控件 (ActiveX Control) 一般不可以作为服务器端组件.

请参考<a href=aboutbook.asp>《Delphi'99大富翁》</a>第七章<a herf=book/activex.zip>ActiveX</a>。
 
huizhang:
ActiveX控件需下载到客户端,而ASP的服务器端组件是在后台运行的,没有用户界面,这是不是矛盾的?
 
ActiveX当然可以作为服务端组件使用。
首先必须澄清一点, ActiveX不一定非得有界面。
正是因为ActiveX可以作为ASP的扩展才使得 ASP(Active Server Page)更具有吸
引力和生命力。最简单的ActiveX服务端的例子就是微软的ADO(ActiveX Data Object)。
为了把问题说得更清楚一些,我把MSDN中Active Server Page里面的一节复制到下面:

使用组件和对象
-------------
ActiveX 组件是建立强大的 Web 应用程序的关键。组件提供了用在脚本中执行任务
的对象。ASP 同样提供了可在脚本中使用的内建对象。本主题将讨论如何使用组件提
供的对象以及由 Active Server Pages 直接提供的内建对象。

关于组件
ActiveX 组件是一个文件,该文件包含执行某项或一组任务的代码。组件可以执行公
用任务,这样就不必自己去创建执行这些任务的代码。例如,股票行情收报机组件可
以在 Web 页上显示最新的股票报价。ASP 带有可以直接使用的组件,如 Database
Access 组件。从第三方开发者处获得可以可选的组件。或者也可以编写自己的组
件。

可以利用组件作为脚本和基于 Web 应用程序的基本构造块。只要知道如何访问组件提
供的对象。即使是位编写脚本的新手,也可以在不了解组件运作方式的情况下编写脚
本。总之,组件使您不用学习编程就能够编写强大的脚本。

如果您是位 Web 应用程序的开发者,可以通过编写组件封装商务逻辑。例如,可以编
写组件来计算产品的销售税。然后可以在处理销售订单的脚本中调用这个组件。在订
单的处理过程中独立计算税率可以在某地销售税改变的时候只更新组件,而无须更改
整个处理过程。可以使用任何支持组件对象模型 (COM) 的语言来编写组件,如,C、
C++、Java 或 Visual Basic。如果熟悉 COM 编程,ActiveX 组件就是
Automation 服务器。要在 Web 服务器上运行,ActiveX 组件不能有图形用户接口
元素,如 Visual Basic 的 MsgBox 函数。

组件是可以重复使用的。在 Web 服务器上安装了组件后,就可以从 ASP 脚本、
ISAPI 应用程序、服务器上的其他组件或由另一种 COM 兼容语言编写的程序中调用
该组件。

生成组件对象的实例
组件是包含在动态链接库 (.dll) 或可执行文件 (.exe) 中的可执行代码。组件可以
提供一个或多个对象以及对象的方法和属性。要使用组件提供的对象,请创建对象的
实例并将这个新的实例分配变量名。使用 ASP 的 Server.CreateObject 方法可以
创建对象的实例。接着,使用脚本语言的变量分配指令为对象实例命名。创建对象实
例时,必须提供实例的注册名称 (PROGID)。对于由 ASP 提供的基本组件,可以从参
考页中获得对象的 PROGID。

例如,ASP 的 Ad Rotator 组件在图形广告中任意循环。Ad Rotator 组件提供了一
个被称为 Ad Rotator 对象,该对象的 PROGID 是 "MSWC.AdRotator"。要创建一
个 Ad Rotator 对象的实例,请使用下列指令:

VBScript:

<% Set MyAds = Server.CreateObject("MSWC.AdRotator") %>
JScript:

<% var MyAds = Server.CreateObject("MSWC.AdRotator") %>
如果您已经非常熟悉 VBScript 或者 JScript ,将会注意到没有使用创建新对象实
例的脚本语言函数,如 VBScript 中的 CreateObject 或 JScript 中的 New。您
必须使用 ASP 的 Server.CreateObject 方法,否者 ASP 无法跟踪脚本语言中对象
的使用。

...

使用 ASP 内建对象
ASP 提供执行任务的内建对象。例如,Request 对象存储从 HTML 表格参考。

调用 Object 方法
方法是可以在对象上所执行或使用对象执行的活动。调用方法的一般语法为:

Object.Method parameters

参数随着方法的不同而不同。
...
 
Sorry! Huizhang, 我认为您讲的都对,

但是,

ActiveX Document (原来叫 OLE Document)
ActiveX Control
ActiveX Automation(原来叫 OLE Automation)

都是与 COM 技术相关的,却是三个东西,光讲 ActiveX 有些笼统,

我认为中文MSDN翻译的“ActiveX 组件”,原为 ActiveX Component,
而不是 ActiveX Control.

就怪可恶的 M$, 玩弄了太多的名词。以下是我摘自 IIS 4 产品文档的词汇表。
-------------------------------------------------------------------
ActiveX
允许开发人员为 World Wide Web 创建交互式组件的内涵丰富的 Microsoft
技术术语。允许用不同语言编写的软件组件在网络环境中一起工作的一组不依赖语言
的互操作技术。ActiveX 的关键元素是组件对象模型 (COM) 和分布组件对象模型
(DCOM)。这些技术已得到开放组织的许可,已移植到许多平台上。请参阅 COM、CGI、DCOM 或 Java。

ActiveX Automation(ActiveX 自动化)
从应用程序外操作 ActiveX 组件方式的与语言无关的方法。ActiveX 自动控制通常
用于创建说明编程工具和宏语言方式的组件。ActiveX 自动控制以前称为 OLE 自动
控制。

ActiveX component(ActiveX 组件)
基于封装一组商业功能的 COM 的编译软件组件。通过 ActiveX 自动界面访问
ActiveX 组件中的功能。ActiveX 组件可以通过 DCOM 在客户机或服务器计算机上
执行,对调用应用程序是透明的。脚本语言(如 Microsoft Visual Basic 脚本编
辑 (VBScript) 或 Microsoft JScript)可以驱动 ActiveX 组件。在
Microsoft Java 虚拟机中运行的所有 Java 应用程序,自动成为 ActiveX 组件并
使用文件扩展名 .class。在调用应用程序过程中运行的 ActiveX 组件使用文件扩展
名 .dll 或 .ocx。在调用应用程序过程外运行的 ActiveX 组件使用文件扩展名
.exe。请参阅 COM、DCOM。

ActiveX Control(ActiveX 控件)
基于封装一组商业或用户界面功能的组件对象模型 (COM) 的已编译软件组件,
ActiveX 控件用于提供用户界面组件并设计在客户机上运行。ActiveX 控件可以内嵌
在 Web 页上以便通过 Internet 使用,也可以组合起来创建通过企业网运行的客户/
服务器应用程序。可以用 Microsoft 或第三方提供商提供的各种编程语言创建
ActiveX 控件。ActiveX 控件使用文件扩展名 .ocx。请参阅 COM。

ActiveX object(ActiveX 对象)
通过自动接口为其他应用程序或编程工具提供的对象。
 
愿意聆听两位高手的争论,受益非浅!
 
既然有人愿意听, 我就在发表点谬论。

ActiveX Control 的分类

Standard ActiveX Control:相当于Delphi中的TWinControl
Non-visual ActiveX Control:相当于TComponent
Data-bount ActiveX Control:Standard ActiveX Control绑定到某个DataSource
Design-time ActiveX Controls:具有设计阶段支持的控件,运行时使用Run-time版本
Internet data Controls:能够从远程的服务器下载数据的控件
Downloadable Controls:带有自动下载到客户机功能的控件
ActiveForms:相当于Delphi的TForm的控件
ActiveDocument:按照document-view模式设计的控件,具有打开并显示或编辑文件的能力
Non-windowed Controls:非Windowed图形控件相当于Delphi中的TGraphicControl

用于ASP服务组件的Control可以是Non-visual ActiveX Control。
如果非得分出个控件,组件也是可以的,那只是叫法上的区别。
上一段文字来自,《Learning ActiveX in 21 Days》里面的一章
 
但是,huizhang, 好象不只是叫法上的区别。

ActiveX Control 不一定使用 Automation 机制/标准,就能用
ActiveX component 一定是用 Automation 机制/标准。

如何在 ASP 用 Non-visual ActiveX Control 呢?
Set MyObj = Server.CreateObject("server.object")
想来是调用了某个 Automation Sever 中的 ActiveX component/object

Non-visual ActiveX Control <> ActiveX component

您的意思是不是这样,一个 Non-visual ActiveX Control,同时也是个
Automation Sever,提供 ActiveX component/object 给其他程序调用。
 
我的意思是说, ActiveX Control也可以作为ASP的组件来使用, 尽管他本身不是一
个服务程序, 但是ASP可以通过使用该Control获得某些信息然后通过ASP的服务功能
传送给客户端。

此外,ActiveX Control并不一定是一个OCX,他可以是DLL,Exe,也可以是用户自
定义扩展名。

这个ActiveX Control必须有一个Contrainer的定义是VB里面说的,但是该说法是
不正确的,对于不可见的Control就不需要Container,比如WinSock,MSComm32.OCX,
就是典型的TComponent类似的ActiveX Control。

现在微软系的东西翻译成中文就是很模糊,有组件,控件,部件。。。
 
hi, huizhang 很高兴与和您讨论,

> ActiveX Control也可以作为ASP的组件来使用
我一直以为:ASP调用组件是通过Automation接口的。
^^^^
关键是这个“组件”,英文的ASP说明中只提到了 Component 而不是 Control.
ActiveX Control不能作为ASP的组件来使用,因为它没有Automation
接口.

>ActiveX Control 并不一定是一个OCX,他可以是DLL,Exe ...
我一直以为: In-Process 的 ActiveX Component 是 dll, ocx,
Out-of-Process 的 ActiveX Component 是 exe,
而 ActiveX Control一定是一个OCX。

请指正。
 
老孙, 咱们俩争论的其实不是一个东西, 你所说的Active Server Component是能够
处理Request, Response...的Asp服务扩展, 我所说的是不可见ActiveX控件可以被
ASP调用得到一定的信息供ASP使用。

ActiveX Control的Automation接口是有的,Automation接口是COM的基本要求。

在VB,Foxpro中对ActiveX Control,Component的定义是有明确区别的,在C++里
面好像这两个词可以互换。

总的来说“控件-Control”,“组件-Component”就是你所说的意思(按照VB标准)。

控件比“组件”更复杂一些,除了具有“组件”的特性以外,“控件”还要有与程序
界面(Container)通讯的能力。ASP因为不是一个容器,故不能使用可视“控件”。

至于用什么扩展名,其实是无所谓,注册后都能在调用的时候自行启动即可。但是,
微软的习惯好像是提供单一的Object的ActiveX一般用OCX,提供多个Objects的
ActiveX使用DLL(如:ComCtl32.dll)。

咱俩讨论了半天,我看yao_jun小弟要的是你所提供的答案。
 
谢谢两位大哥的支持,我的问题确实有些笼统,害你们争论了这么久,很抱歉。
其实,我遇到的情况是要处理由浏览器中form返回的字符串,处理算法类似一个
语法编译器,最终得到数个结果字符串,所以想用delphi做一个服务器端组件,
delphi对COM的支持实在周到,有ActiveX control、Automation object,还有COM object(delphi4 C/S版),看过yysun大哥给cindy的例子,不知我所要做的
组件是否也要做成OLE automation server,所以有此一问,还望二位大哥继续指教。
 
yao_jun, 方法很多, ASP, CGI, ISAPI都可以处理你的字符串。如果你的算法不复
杂的话, 可以直接做到网页中不需要Form, 用java script,vbscript,java applet
等就能够解决。若较复杂,可以考虑做一个服务程序。
 
很高兴与 huizhang 大大讨论一番,
说实话,有时想找个懂行的人争论一下,都不容易。
前一段在研究 Transaction Server,被 M$ 的名词弄得很糊涂。
 
两位老师,争论很精彩。
COM 对象作为OLE Auto Server的必要条件是支持IDispatch 接口。
所以不是所有的ActiveX Control都可以做OLEAuto Server,但是也不是
都不行。
我试了一下,Delphi自动生成的Active Control都是支持IDispatch的,
可以做OLE Auto server.当然实际编程中还要注意很多问题。
 
delphi的help文件中将基本COM对象定义为支持IUnknown接口,
automation object需支持IUnknown和IDispatch接口,而
ActiveX Control除上述两个接口外,还支持其它接口,在
这一点上,ActiveX Control应是基于COM标准应用对象的最高
版本。
 
这篇讨论非常精彩.
 
后退
顶部