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

wuhs 2017-03-29 11:24:17
我写了一个DataSnap服务器,已经正常运行,但想在服务器上增加一个方法,供客户端调用,所以在服务器的TDSServerModule类中增加了一个Public方法,一切正常。在服务器内部其他单元调用也正常。
重新编译服务器,运行。

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

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

问:Datasnap第一次创建后就不能再新增方法了吗?如何才能让新增方法在客户端可见、可调用?是不是DataSnap还有一个重新注册的问题。
...全文
784 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuhs 2017-05-16
  • 打赏
  • 举报
回复
这个问题已经搞定,Datasnap不支持WideString参数,将Widestring改为String就可以了。Delphi也不提示一下,帮助文件也不说一声,真痛苦。
lyhoo163 2017-04-27
  • 打赏
  • 举报
回复
你仅在相关类中,加入了 一个方法。 你还要在其它单元中,加入它的实现部分。否则执行代码?
wuhs 2017-04-27
  • 打赏
  • 举报
回复
我用的是XE7,找到type Library了,但找不到我的服务对应的Library,也编辑不了。讲讲原理吧。

我就一简单的DataSnap,里面有一个TDSServerModule类,服务器跑了一段时间,现在觉得想在TDSServerModule类加一个函数,让客户端能使用。函数加好了,重新编译服务器,重新运行。但新加的函数在端户找不到。使用generate Datasnap client classes也出不来。我就不知道DataSnap是否有注册,需要重新注册或注册TDSServerModule类,为何XE7不自动重新注册,要我手动注册,或在代码里面加注册代码,在哪加。XE7的帮助文件不何只字不提。
lyhoo163 2017-04-24
  • 打赏
  • 举报
回复


此处打开,这是D7的,其它版本类似。
wuhs 2017-04-23
  • 打赏
  • 举报
回复
@lyhoo163,不好意思,没有找到*.tlb文件,界面也没有找到打开的入口,能讲得再细一点吗。
wuhs 2017-04-23
  • 打赏
  • 举报
回复
@jankercsdn, 已经存在的DataSnap服务器,想增加方法,不可能再去向导一遍。
看那山瞧那水 2017-03-30
  • 打赏
  • 举报
回复
datasnap程序,通过向导产生的程序,客户端有一个ClientClasses.pas单元,TServerMethods1Client = class(TDSAdminClient)这个类里列出了服务端调用的方法。新加方法,服务端重新编译运行后,在客户端右键点击连接组件(比如SQLConnection1,一般在ClientModule.pas),弹出菜单点击“Generate DataSnap ClientClasses”,重新产生ClientClasses.pas,覆盖原单元。或者在ClientClasses.pas手工加入方法,模仿已有的方法。
lyhoo163 2017-03-29
  • 打赏
  • 举报
回复
你这样加入的方法,不能在客户端正常使用。因为,方法示加入到*.tlb文件(相应的类)中。
DataSnap加入方法必须通过IED打开 Server*.tlb文件,再加入方法。见下图:

ITServer之下,就是加入的方法。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧