1

我的应用程序有些奇怪。我想知道我做错了什么或我不明白什么。

目标是在 ServerMethodsUnit 中创建 2 个函数来修改 Web 模块的变量。

为了那个原因,

我使用了带有以下参数的 Datasnap Rest Server 向导

独立的 VCL Gui 应用程序没有自动化,来自 Tdatamodule 服务器方法 EchoString 和 ReverseString 运行良好。

首先,我在 WebModuleUnit1 中添加了变量 var1:string;

TWebModule1 = class(TWebModule)
DSHTTPWebDispatcher1: TDSHTTPWebDispatcher;
DSServer1: TDSServer;
DSServerClass1: TDSServerClass;
ServerFunctionInvoker: TPageProducer;
ReverseString: TPageProducer;
WebFileDispatcher1: TWebFileDispatcher;
DSProxyGenerator1: TDSProxyGenerator;
DSServerMetaDataProvider1: TDSServerMetaDataProvider;

procedure DSServerClass1GetClass(DSServerClass: TDSServerClass;
var PersistentClass: TPersistentClass);
procedure ServerFunctionInvokerHTMLTag(Sender: TObject; Tag: TTag;
const TagString: string; TagParams: TStrings; var ReplaceText: string);
procedure WebModuleDefaultAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebFileDispatcher1BeforeDispatch(Sender: TObject;
const AFileName: string; Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
procedure WebModuleCreate(Sender: TObject);
private
{ Déclarations privées }
FServerFunctionInvokerAction: TWebActionItem;
function AllowServerFunctionInvoker: Boolean;
public
{ Déclarations publiques }
var1:string;
end;

我在 ServerMethodsUnit1 中添加了 ServerMethodsUnit1 中的 2 个函数

函数 SetVar1(astr:string):string; 函数GetVar1():字符串;

以及 Datasnap.DSHTTPWebBroker(接口)和 WebModuleUnit1(实现)的使用

function TServerMethods1.GetVar1: string;
var oweb : TWebModule1;
begin
   oweb := TWebModule1(GetDataSnapWebModule);
   result := oweb.var1;
end;

function TServerMethods1.SetVar1(astr: string): string;
var oweb : TWebModule1;
begin
   oweb := TWebModule1(GetDataSnapWebModule);
   oweb.var1 := astr;
   result := oweb.var1;
end;

一切似乎都很好!

我用http://localhost:xxxx/ServerFunctionInvoker测试我的 2 函数

当我只有一个连接到我的网络服务器时,一切正常。

当我有多个连接时,它不再起作用。我的印象是该变量由 WebModule 的不同实例共享。

例子 :

    Instance 1 (Chrome) -> SetVar1('TOTO')

    Instance 2 (Firefox) -> SetVar1('HELLO')

    Instance 1 (Chrome) -> GetVar1 : return 'TOTO'

    Instance 1 (Chrome) -> GetVar1 : return 'HELLO'

    Instance 1 (Chrome) -> GetVar1 : return ''

如果我运行相同的功能 3 次,我没有相同的答案!!!

就好像 GetDataSnapWebModule 函数没有返回正确的 web 模块。

我做错了什么?

如何在函数 rest 的 2 次调用之间共享变量(或 TfdmemTable)

预先感谢您的帮助。

@+ 罗莫尔德

4

0 回答 0