我的申请中有些奇怪。我想知道我做错了什么或者我不明白。
目标是在ServerMethodsUnit中创建2个函数来修改Web模块的变量。
为此,
我使用带有以下参数的Datasnap Rest Server向导
独立VCL Gui申请 没有自动化, 来自Tdatamodule 服务器metjhods 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函数
function SetVar1(astr:string):string; function GetVar1():string;
以及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函数没有返回正确的webmodule。
我做错了什么?
如何在函数rest的2次调用之间共享变量(或TfdmemTable)
提前感谢您的帮助。
@ + Romuald