DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list

时间:2021-01-23 16:13:28
我写了一个DataSnap服务器,已经正常运行,但想在服务器上增加一个方法,供客户端调用,所以在服务器的TDSServerModule类中增加了一个Public方法,一切正常。在服务器内部其他单元调用也正常。
重新编译服务器,运行。

在客户端用TSQLConnection连接服务器,正常连通。使用generate Datasnap client classes,产生的新单元没有新增的方法;
在客户端的ClientClasses单元编写调用方法,运行,报Remote error:   datasnap... method.... not in the server method list错误。

TDSServer用DSServer的onGetClass方法设置增没有问题。

问:Datasnap第一次创建后就不能再新增方法了吗?如何才能让新增方法在客户端可见、可调用?是不是DataSnap还有一个重新注册的问题。

8 个解决方案

#1


你这样加入的方法,不能在客户端正常使用。因为,方法示加入到*.tlb文件(相应的类)中。
DataSnap加入方法必须通过IED打开 Server*.tlb文件,再加入方法。见下图:
DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list
ITServer之下,就是加入的方法。

#2


datasnap程序,通过向导产生的程序,客户端有一个ClientClasses.pas单元,TServerMethods1Client = class(TDSAdminClient)这个类里列出了服务端调用的方法。新加方法,服务端重新编译运行后,在客户端右键点击连接组件(比如SQLConnection1,一般在ClientModule.pas),弹出菜单点击“Generate DataSnap ClientClasses”,重新产生ClientClasses.pas,覆盖原单元。或者在ClientClasses.pas手工加入方法,模仿已有的方法。

#3


@jankercsdn, 已经存在的DataSnap服务器,想增加方法,不可能再去向导一遍。

#4


@lyhoo163,不好意思,没有找到*.tlb文件,界面也没有找到打开的入口,能讲得再细一点吗。

#5


DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list

此处打开,这是D7的,其它版本类似。

#6


我用的是XE7,找到type Library了,但找不到我的服务对应的Library,也编辑不了。讲讲原理吧。

我就一简单的DataSnap,里面有一个TDSServerModule类,服务器跑了一段时间,现在觉得想在TDSServerModule类加一个函数,让客户端能使用。函数加好了,重新编译服务器,重新运行。但新加的函数在端户找不到。使用generate Datasnap client classes也出不来。我就不知道DataSnap是否有注册,需要重新注册或注册TDSServerModule类,为何XE7不自动重新注册,要我手动注册,或在代码里面加注册代码,在哪加。XE7的帮助文件不何只字不提。
DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list

#7


你仅在相关类中,加入了 一个方法。
你还要在其它单元中,加入它的实现部分。否则执行代码?

#8


这个问题已经搞定,Datasnap不支持WideString参数,将Widestring改为String就可以了。Delphi也不提示一下,帮助文件也不说一声,真痛苦。

#1


你这样加入的方法,不能在客户端正常使用。因为,方法示加入到*.tlb文件(相应的类)中。
DataSnap加入方法必须通过IED打开 Server*.tlb文件,再加入方法。见下图:
DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list
ITServer之下,就是加入的方法。

#2


datasnap程序,通过向导产生的程序,客户端有一个ClientClasses.pas单元,TServerMethods1Client = class(TDSAdminClient)这个类里列出了服务端调用的方法。新加方法,服务端重新编译运行后,在客户端右键点击连接组件(比如SQLConnection1,一般在ClientModule.pas),弹出菜单点击“Generate DataSnap ClientClasses”,重新产生ClientClasses.pas,覆盖原单元。或者在ClientClasses.pas手工加入方法,模仿已有的方法。

#3


@jankercsdn, 已经存在的DataSnap服务器,想增加方法,不可能再去向导一遍。

#4


@lyhoo163,不好意思,没有找到*.tlb文件,界面也没有找到打开的入口,能讲得再细一点吗。

#5


DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list

此处打开,这是D7的,其它版本类似。

#6


我用的是XE7,找到type Library了,但找不到我的服务对应的Library,也编辑不了。讲讲原理吧。

我就一简单的DataSnap,里面有一个TDSServerModule类,服务器跑了一段时间,现在觉得想在TDSServerModule类加一个函数,让客户端能使用。函数加好了,重新编译服务器,重新运行。但新加的函数在端户找不到。使用generate Datasnap client classes也出不来。我就不知道DataSnap是否有注册,需要重新注册或注册TDSServerModule类,为何XE7不自动重新注册,要我手动注册,或在代码里面加注册代码,在哪加。XE7的帮助文件不何只字不提。
DataSnap服务端增加新方法,客户端调用时报datasnap method not in the server method list

#7


你仅在相关类中,加入了 一个方法。
你还要在其它单元中,加入它的实现部分。否则执行代码?

#8


这个问题已经搞定,Datasnap不支持WideString参数,将Widestring改为String就可以了。Delphi也不提示一下,帮助文件也不说一声,真痛苦。