2014-10-27 52 views
1

我有一个Delphi XE5(更新2)程序创建使用IDE的标准'文件|新增|其他| DataSnap服务器| DataSnap REST应用程序'向导。德尔福在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} 

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

回答

0

使用枚举不支持作为方法参数。如果Datasnap在其不支持的方法上找到参数类型,则表示该方法不存在,这会导致您看到的错误。

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

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

+0

奇怪的是,在枚举类虽然而非方法paramters性工作。我可以忍受这一点虽然。感谢您的帮助。 – 2014-10-28 10:19:43

+0

你是如何将该类传递给该方法的?什么是方法签名?你使用GET还是另一个http动词?根据你的操作方式,当你将一个对象传递给一个方法时,它首先通过一个解串器,而解串器可能支持枚举,即使Datasnap路由器没有。 – 2014-10-28 10:37:38