2017-01-30 34 views
2

我使用德尔福10.1柏林更新2企业和DataSnap客户端/服务器REST框架。德尔福Datasnap客户端代码没有获得未经授权的异常

如果我不运行调试应用程序,并调用用户无权调用一个方法,代码运行没有任何异常,该方法返回一个空应答。

交互式调试在客户端调用DataSnap服务器方法时,我得到两个关于“未授权”的弹出式例外。

第一个气泡上升并被第二个取代。

第二个异常被“吃掉”,会话/连接关闭,然后该方法返回一个空白结果(例如,如果返回类型是整数,则返回0,而对于字符串返回类型则返回空字符串)。

这在下面的代码段附近发生在Datasnap.DSClientRest单元ExecuteRequest方法结束:

except 
    on E: TDSRestProtocolException do 
    LSessionExpired; 
end; 

为什么这些异常(例如TDSRestProtocolException)未达到我的代码?

我有种想这是一个新的更新2,我记得看到那些异常冒泡之前我的代码更新2

Attached是一个骨架的例子(由德尔福向导生成标准的例子)演示问题 - 点击按钮,你会得到“”而不是“4321”,因为用户没有被授权 - 但没有运行时异常。

我是新来的DataSnap,所以提前为有用的反应和我一起承担:-)

感谢=)

+0

注意这是使用客户端的DataSnap RES T模块(http),而不是简单的TCP/IP客户端DataSnap模块。 –

回答

1

这是发生由于添加到服务器和客户端的webmodule DSAuthenticationManager1组件未能通过验证。

请通过此检查如何与认证 Adding Authentication and Authorization

+0

本文使用DataSnap客户端模块,而不是我需要使用的DataSnap客户端REST模块。即使我在客户端DSRestConnection1组件上设置用户名,授权异常仍然不会到达UI。注意!这些异常*出现在库代码中,但它们没有冒泡到我的代码中。发生授权检查*,但我的UI代码没有看到异常,因为它们正在库代码中被吃掉。 –

+0

为了清楚起见,“添加身份验证和授权”文章中的SQLConnection1按预期工作,并且UI会看到未经授权的异常。这是我的示例项目中的DSRestConnection1,在同一配置下没有看到相同的异常。 –

0

Well..I'm不知道工作,但尝试的服务器方法被创建

procedure TClientModule1.TestCon(aUsername, aPassword: string); 
var 
lServerMethodsClient : TServerMethodsClient; 
begin 
DSRestConnection1.UserName := aUsername; 
DSRestConnection1.Password := aPassword; 
lServerMethodsClient:=TServerMethodsClient.Create(DSRestConnection1); 
end; 
实例之前提供给DSRestConnection1组件的用户名和密码

,并尝试从乌尔clientform称之为functn

procedure TF_ClientForm.Button1Click(Sender: TObject); 
begin 
ClientModule1.TestCon(EdtUsername.Text, EdtPassword.Text); 
end; 
+0

问题不在于auth * enttion * ation,而在于auth * ouriz * ation :-) –

+0

我最终通过TCP/IP切换到“DataSnap Server”和“DataSnap Client Module”。精美的作品。注意为什么REST等价物有这个问题,但我浪费了足够的时间!谢谢,pn098,花时间贡献= D –