Delphi Datasnap client code not getting unauthorized exception

I'm using Delphi 10.1 Berlin Update 2 Enterprise and the DataSnap client/server REST framework.

If I run the app without debugging and invoke a method the user isn't authorized to invoke, the code runs without any exception and the method returns a null response.

When interactively debugging a call on the client to a DataSnap server method, I get two popup exceptions regarding "unauthorized".

The first bubbles up and is replaced by the second.

The second exception gets "eaten" and the session/connection simply closed and then the method returns a blank result (eg a zero if the return type is integer, and an empty string for a string return type).

This is happening in the following section of code near the end of the ExecuteRequest method in the Datasnap.DSClientRest unit:

except
  on E: TDSRestProtocolException do
    LSessionExpired;
end;

Why are these exceptions (eg TDSRestProtocolException) not reaching my code?

I kind of think this is new to Update 2, and I remember seeing those exceptions bubble up to my code prior to Update 2.

Attached is a skeleton example (standard example generated by Delphi wizards) that demonstrates the issue - click the button and you get "" instead of "4321" because the user isn't authorized - but no runtime exception.

I'm new to DataSnap, so bear with me :-)

Thanks in advance for helpful responses =)


This is happening due to DSAuthenticationManager1 component added to webmodule of the server and client side is failing to authenticate.

Please go through this to check how to work with authentication Adding Authentication and Authorization


Well..I'm not sure but try providing username and password to DSRestConnection1 component before the instance of server methods gets created

procedure TClientModule1.TestCon(aUsername, aPassword: string);
var
lServerMethodsClient : TServerMethodsClient;
begin
DSRestConnection1.UserName := aUsername;
DSRestConnection1.Password := aPassword;
lServerMethodsClient:=TServerMethodsClient.Create(DSRestConnection1);
end;

and try to call this functn from ur clientform

procedure TF_ClientForm.Button1Click(Sender: TObject);
begin
ClientModule1.TestCon(EdtUsername.Text, EdtPassword.Text);
end;
链接地址: http://www.djcxy.com/p/64690.html

上一篇: 反序列化休眠和杰克逊中的延迟加载

下一篇: Delphi Datasnap客户端代码未获得未授权的异常