P
pegasus
Unregistered / Unconfirmed
GUEST, unregistred user!
来自:dsp 时间:99-7-30 16:24:13 ID:122758
我做了一个小的Midas的Server(Remote Datamodule),未用任何数据库控件。
只写了一个成员函数,由客户端调用。当Server是个Exe时,一切正常。但当
Server是个Service时,却出现奇怪现象。无客户连接时,Service运行正常
(其实就是个空的Service,在Excutive中等待用户交互)。客户端用
DComConnection去连时,连接成功,调用接口中的函数也正常。但一端时间
后(约60秒),系统弹出对话框,就是在客户端有连接时直接关闭Server提示
的那种。想必是Server端出现异常想要关闭Server.此时如果不理会该对话框,
客户端执行依旧正常(连新的客户端连接都正常)。只要选择了Yes或NO关了对话
框(即使是NO),则客户端便不再正常,出现RPC服务器不可用错误,必须重新连
接。之后60秒后对话框重新出现。那位遇到过类似问题或有好的提示。谢谢。
很急的说。
另外,我不用访问数据库原本无须用MIDAS,只要用Automation对象即可。可是
为什么在Com的Interface的函数中无法调用主窗体的函数和变量。否则,客户
端出现EOleException. E.Message='灾难性错误'。唉,真是灾难。那位高手
给解释解释。
--------------------------------------------------------------------------------
来自:pegasus 时间:99-7-31 19:41:18 ID:123009
您的Service有没有和用户交互的权限?(是NT service吧?)
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 09:12:57 ID:123273
是NT Service! 在哪儿设定与用户交互的权限?能详细说明一下吗?
(注意:如果我不理弹出的对话框的话,其他一切正常!!! )
那位做过Com server的Service,给我个例子。谢谢。
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 10:44:01 ID:123298
TO pegasus:
我找到了你说的与用户交互的权限的设置,我设置后依然没用。
而且我找到了问题的根源。原因是Service中没有窗口,无法进行消息循环,
而Com Server启动后由于没有消息循环自己便要终止。就象直接运行Service
Application一样。这是Delphi的VCL的弱点,因此必须自己创建没有界面的窗
口而Delphi的所有窗口都是有界面,而Service又无法接收界面。解决的办法只
有自己处理消息循环,截获Application.Terminate消息,自己控制退出。
自己解决的问题,怎么算分呀!
--------------------------------------------------------------------------------
来自:pegasus 时间:99-8-2 14:06:13 ID:123346
当然是把分数还给您啦!你的经验会帮助别人的!
PS: service本身是可以有界面的。
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 16:00:56 ID:123382
不好意思,刚才的方式还是有点问题。不过现在解决了,办法相当简单。
在注册表的LOCAL_MACHINE/AppId/{...}下加一个字符值
LocalService=YourServiceName. 其中{...}为你的Com类的GUID.
在Borland的News中找到的。
我做了一个小的Midas的Server(Remote Datamodule),未用任何数据库控件。
只写了一个成员函数,由客户端调用。当Server是个Exe时,一切正常。但当
Server是个Service时,却出现奇怪现象。无客户连接时,Service运行正常
(其实就是个空的Service,在Excutive中等待用户交互)。客户端用
DComConnection去连时,连接成功,调用接口中的函数也正常。但一端时间
后(约60秒),系统弹出对话框,就是在客户端有连接时直接关闭Server提示
的那种。想必是Server端出现异常想要关闭Server.此时如果不理会该对话框,
客户端执行依旧正常(连新的客户端连接都正常)。只要选择了Yes或NO关了对话
框(即使是NO),则客户端便不再正常,出现RPC服务器不可用错误,必须重新连
接。之后60秒后对话框重新出现。那位遇到过类似问题或有好的提示。谢谢。
很急的说。
另外,我不用访问数据库原本无须用MIDAS,只要用Automation对象即可。可是
为什么在Com的Interface的函数中无法调用主窗体的函数和变量。否则,客户
端出现EOleException. E.Message='灾难性错误'。唉,真是灾难。那位高手
给解释解释。
--------------------------------------------------------------------------------
来自:pegasus 时间:99-7-31 19:41:18 ID:123009
您的Service有没有和用户交互的权限?(是NT service吧?)
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 09:12:57 ID:123273
是NT Service! 在哪儿设定与用户交互的权限?能详细说明一下吗?
(注意:如果我不理弹出的对话框的话,其他一切正常!!! )
那位做过Com server的Service,给我个例子。谢谢。
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 10:44:01 ID:123298
TO pegasus:
我找到了你说的与用户交互的权限的设置,我设置后依然没用。
而且我找到了问题的根源。原因是Service中没有窗口,无法进行消息循环,
而Com Server启动后由于没有消息循环自己便要终止。就象直接运行Service
Application一样。这是Delphi的VCL的弱点,因此必须自己创建没有界面的窗
口而Delphi的所有窗口都是有界面,而Service又无法接收界面。解决的办法只
有自己处理消息循环,截获Application.Terminate消息,自己控制退出。
自己解决的问题,怎么算分呀!
--------------------------------------------------------------------------------
来自:pegasus 时间:99-8-2 14:06:13 ID:123346
当然是把分数还给您啦!你的经验会帮助别人的!
PS: service本身是可以有界面的。
--------------------------------------------------------------------------------
来自:dsp 时间:99-8-2 16:00:56 ID:123382
不好意思,刚才的方式还是有点问题。不过现在解决了,办法相当简单。
在注册表的LOCAL_MACHINE/AppId/{...}下加一个字符值
LocalService=YourServiceName. 其中{...}为你的Com类的GUID.
在Borland的News中找到的。