【问题标题】:Delphi Enumerated types in REST ServerREST Server 中的 Delphi 枚举类型
【发布时间】:2014-10-27 10:20:26
【问题描述】:

我有一个使用 IDE 的标准“文件 |”创建的 Delphi XE5(更新 2)程序。新 |其他 |数据快照服务器| DataSnap REST 应用程序向导。

当用作服务器方法的参数时,我似乎无法让枚举类型工作。所有其他服务器方法都可以工作,例如那些将其他类作为参数、字符串等的方法。当我尝试从 Web 浏览器调用具有枚举参数的方法时,我收到错误消息 'Project Project1.exe raised exception class TDBXError with message 'TServerMethods1.EnumString method not found in the server method list'

这是我的基本测试代码:

type
{$METHODINFO ON}
  TMyEnum=(meOne, meTwo);

  TServerMethods1 = class(TDataModule)
  private
    { Private declarations }
  public
    { Public declarations }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function EnumString(const AEnum: TMyEnum): string;
  end;
{$METHODINFO OFF}

然而,奇怪的是,如果枚举类型包含在另一个类中,然后这个类被传递一个参数给我的方法,我可以让它们工作。如果我将枚举参数更改为整数,那么这个工作,但我真的不想这样做。

【问题讨论】:

    标签: delphi rest enums datasnap


    【解决方案1】:

    不支持使用枚举作为方法参数。如果 Datasnap 在它不支持的方法上发现参数类型,它将表现得好像该方法不存在,这会导致您看到的错误。

    有关支持的参数类型列表,请查看 TDSServerClass 文档:

    http://docwiki.embarcadero.com/Libraries/XE7/en/Datasnap.DSServer.TDSServerClass

    【讨论】:

    • 奇怪的是枚举在类的属性中起作用,但在方法参数中不起作用。不过我可以忍受。谢谢你的帮助。
    • 如何将类传递给方法?什么是方法签名?您使用的是 GET 还是其他 http 动词?根据您的操作方式,当您将对象传递给方法时,它首先通过反序列化器传递,即使 Datasnap 路由器不支持,反序列化器也可能支持枚举。
    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2012-06-22
    • 2012-09-16
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多