Delphi Seattle DataSnap客户端 - 代理服务器设置不起作用

Jon*_*ham 12 delphi rest proxy datasnap

我正在使用生成的DS客户端代理类通过TDSRESTConnection连接到DataSnap服务器.连接工作正常,我可以调用服务器方法.我现在想要通过代理服务器进行连接,所以我在TDSRESTConnection对象上设置属性,但我可以看到没有任何内容通过代理服务器发送,就好像属性被忽略一样.我的代码如下:

var
  myDS: TServerMethodsClient;
begin
  DSRESTConnectionCfg.ProxyHost := 'localhost';
  DSRESTConnectionCfg.ProxyPort := 8888;
  myDS := TServerMethodsClient.Create(DSRESTConnectionCfg, False);
  myDS.ServerMethodOne();
  myDS.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我也尝试过设置:

  DSRESTConnectionCfg.HTTP.ProxyParams.ProxyServer := 'localhost';
  DSRESTConnectionCfg.HTTP.ProxyParams.ProxyPort := 8888;
Run Code Online (Sandbox Code Playgroud)

两者都没有效果.但是我知道这个代码在我之前使用的Delphi版本中运行,它是XE6.问题似乎在转向XE10.

任何人都可以对此有所了解吗?

Jon*_*ham 1

问题是由于 TDSHTTP.PrepareRequest 过程中的 Datasnap.DSHTTPClient.pas 单元中的错误所致:

procedure TDSHTTP.PrepareRequest(const ARequest: IHTTPRequest);
var
  LIPRequest: TIPHTTPRequest;
  I: Integer;
  Lprox: TProxySettings;
begin
  if FProxyConnectionInfo <> nil then
  begin
    Lprox := TIPProxyConnectionInfo(FProxyConnectionInfo).FProxySettings;
    //if Lprox.UserName <> emptystr then  // <-- Comment this line out
      FHTTPClient.ProxySettings := TProxySettings.Create(Lprox.Host, Lprox.Port, Lprox.UserName, Lprox.password, Lprox.Scheme);
  end;
Run Code Online (Sandbox Code Playgroud)

如果指定了代理用户名,代码仅应用代理服务器设置,而无论如何它都应始终应用这些设置。