線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3178
推到 Plurk!
推到 Facebook!

IntraWeb中调用COM+出错:对象没有连接到服务器

答題得分者是:pcplayer99
hyxsa002
一般會員


發表:2
回覆:2
積分:0
註冊:2007-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-05 11:35:16 IP:61.142.xxx.xxx 訂閱
IntraWeb中调用COM+组件
我用的是多线程,每次连接一下COM 组件后只能在IWFORM的一个事件中有效(如:IWButton1.click())
如:
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
UserSession.SetConnType('192.168.0.89',ckbConnectType.Checked);//初始化连接COM 组件服器
UserSession.mtsRoot.GetData(AList);//能正常调用COM 组件
UserSession.mtsRoot.abc();//能正常调用COM 组件
END;
以上代码执行完毕后,我查看了一下COM 组件的状态,已停止,接着我执行页面上的BUTTON事件

procedure TIWForm1.IWButton1Click(Sender: TObject);
var
sUserName,sMsg:widestring;
begin
//UserSession.SetConnType('192.168.0.89',ckbConnectType.Checked);//初始化连接COM 组件服器
// 才能执行下面的

UserSession.mtsRoot.DDD();/报错:对象没有连接到服务器,在这里我查了一下DCOM.Connected是True的,
为什么不能调用呢?现在只有重新初始化
if UserSession.mtsRoot.Login[edtUserCode.Text,edtPassWord.Text,sUserName] then
WebApplication.ShowMessage('登陆成功');
end;

难道每个事件不能共享一个DCOM连接?为什么每次执行一个前端事件后COM 就关闭了?
編輯記錄
hyxsa002 重新編輯於 2007-11-06 11:28:43, 註解 無‧
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-07 23:48:15 IP:218.18.xxx.xxx 訂閱
看来你没真正理解 WEB 编程。

IntraWeb 仅仅是提供一个可视化的 WEB 开发环境给你。在实际工作的时候,你在一个 Web page 上点按钮,将会产生一个 HTTP 的 Get 或者 Put 命令发送给服务器的 Web Server,Web Server 再根据收到的 http 请求,去调用 IntraWeb 的程序,并将 http 请求发给它。

IntraWeb 写的程序在收到 Http 请求后,自动帮你把请求转换为调用某个 IntraWeb 里的某个 IWForm 里的方法,调用完那个方法,IWForm 会自动生成 HTTP 的应答发送给客户端,然后 IntraWeb 程序的一次运行就结束了。

HTTP 本身是无状态的,当然也就没办法帮你把你的 COM 留住。就算是做了 COM 连接缓冲池(在ISAPI模式下,如果是CGI模式,则根本不可能有什么缓冲池了),那也仅仅是连接的缓冲,并不帮你保存状态。

如果要保存网络访问状态,比如用户登录状态,IntraWeb 也提供了一些机制,但本质上都是基于 WEB 的 Cookie 或者隐藏字段等机制的。

要用 IntraWeb ,必须先懂得 WEB 是怎么运作的。
hyxsa002
一般會員


發表:2
回覆:2
積分:0
註冊:2007-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-08 09:09:51 IP:61.142.xxx.xxx 訂閱
谢谢,pcplayer99
我是刚学WEB编程的,对WEB动作真的是一点都不懂,谢谢pcplayer99的指导,我会再看一下有关WEB的动作的.

只是我的COM 连接变量已放在UserSessionUnit了的,为什么也不能保存COM 的状态呢,我的IWForm中只是引用了一下COM 的变量来调用了一下COM 组件所提供的服务,就算IWForm.BUTTON.Click(Sender)后,什么都结束了,也不能把我在UserSessionUnit中申请的变量给停下来(COM 已停)

您说的:
IntraWeb 写的程序在收到 Http 请求后,自动帮你把请求转换为调用某个 IntraWeb 里的某个 IWForm 里的方法,调用完那个方法,IWForm 会自动生成 HTTP 的应答发送给客户端,然后 IntraWeb 程序的一次运行就结束了。
其中"IntraWeb 程序的一次运行就结束了".只是一个IWForm的执行结束了吧,UserSession中的变量还是可以引用的呀
或者说:我就想在IntraWeb中保存一个COM 的连接状态,使不用的每个IWForm的事件都能共享这个连接状态,我该怎么实现?
編輯記錄
hyxsa002 重新編輯於 2007-11-08 09:19:08, 註解 無‧
hyxsa002
一般會員


發表:2
回覆:2
積分:0
註冊:2007-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-10 17:03:08 IP:61.142.xxx.xxx 訂閱
这是我在www.atozed.com上找到的回答,好象是说要我you should disable asynchronous calls,但不知怎么操作?请大大指点.


How to connect to Midas using a DCOMConnection?

If you get an EOLESysError ("Object is not connected to server") when calling CoInitializeEx, you should disable asynchronous calls. This is done with the SupportsCallbacks property of TSocketConnection (not TDCOMConnection!).
系統時間:2024-04-27 13:03:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!