对我的英语再次抱歉, 我已经迁移了客户端和服务器,一切运行良好, 直到我注意到服务器的远程数据模块无法正常工作。当我从需要更多时间的客户端运行查询时,其他远程数据模块保持保持状态(包括主要的thred)。它的行为就像线程模型是tmSingle。我环顾四周,尝试了一切,但没有成功。更奇怪的是,在我注册新服务器(使用XE6构建)的地方,旧服务器(使用D7构建)开始给出相同的症状。
在运行旧版本的机器上安装新服务器时,我使用
xxxxx.exe / unregserver(旧版)和
xxxxx.exe / regserver(对于新的),然后是明显的问题。即使我取消注册新服务器,并注册旧服务器,问题仍然存在。
客户端和服务器通过DataSnap Socket(客户端与TSocketConnection和TConnectionBroker)进行通信。
以下是服务器的一些信息
Server_TLB
unit Server_TLB;
uses Windows, ActiveX, Classes, Graphics, Midas, StdVCL, Variants;
const
LIBID_Server: TGUID = '{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}';
IID_IrdmServer: TGUID = '{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}';
CLASS_rdmServer: TGUID = '{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}';
IrdmServer = interface;
IrdmServerDisp = dispinterface;
rdmServer = IrdmServer;
IrdmServer = interface(IAppServer)
['{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}']
........... methods..........
IrdmServerDisp = dispinterface
['{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}']
........... methods..........
CordmServer = class
class function Create: IrdmServer;
class function CreateRemote(const MachineName: string): IrdmServer;
implementation
uses ComObj;
class function CordmServer.Create: IrdmServer;
begin
Result := CreateComObject(CLASS_rdmServer) as IrdmServer;
end;
class function CordmServer.CreateRemote(const MachineName: string): IrdmServer;
begin
Result := CreateRemoteComObject(MachineName, CLASS_rdmServer) as IrdmServer;
end;
end.
..初始化RDM
initialization
TComponentFactory.Create(ComServer, TrdmServer,
Class_rdmServer, ciMultiInstance, tmFree);
..创作顺序
Forms.Application.ShowMainForm := False;
Forms.Application.Initialize;
Forms.Application.CreateForm(TdmServer, dmServer);
Forms.Application.CreateForm(TfMain, fMain);
windows.PostMessage(fMain.Handle, MSG_INITIALIZE, 0, 0);
Forms.Application.Run;
使用标准SocketDispatcher和标准SConnect
还试图设置密钥
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}\InprocServer32]
"ThreadingModel"="Free" or "Both"
我想念别的什么?
感谢您的帮助!
答案 0 :(得分:1)
在这种情况下,我将使用正确的线程模型创建一个简单的DataSnap客户端/服务器应用程序,对其进行测试,然后将自动生成的服务器模块代码与迁移项目中的代码进行比较。
这样,您可以检测关键差异,将代码调整为测试项目服务器模块中的等效代码。
答案 1 :(得分:1)
我建议你查一下:
Midas / DataSnap服务器的安全性:http://qc.embarcadero.com/wc/qcmain.aspx?d=8814
此外,不推荐使用套接字服务器,它有一些缺点: