Delphi Seattle DataSnap客户端 - 代理服务器设置无效

12

我正在使用生成的DS客户端代理类通过TDSRESTConnection连接到DataSnap服务器。连接正常,我可以调用服务器方法。现在我想通过代理服务器连接,因此我正在设置TDSRESTConnection对象上的属性,但是我发现似乎没有任何东西通过代理服务器发送,就好像这些属性被忽略了。我的代码如下:

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

我也尝试设置:

  DSRESTConnectionCfg.HTTP.ProxyParams.ProxyServer := 'localhost';
  DSRESTConnectionCfg.HTTP.ProxyParams.ProxyPort := 8888;

两者都没有影响。但是我知道这段代码在之前我使用的Delphi XE6版本中是有效的。问题似乎出现在升级到XE10时。

有人能解释一下吗?


是的,在同一台PC上,XE6可以正常工作。抱歉,我使用的是Delphi Seattle。 - Jonathan Wareham
更改连接属性后,您需要重置或重新打开连接吗? - nil
嗨,我也尝试过在创建TServerMethodsClient之后设置属性,但没有任何改变。 - Jonathan Wareham
通过HTTP.ProxyParams设置这些参数的方法,我发现注释中提到ProxyServer指定代理服务器的完全限定域名或IP地址。你试过用这个代替‘localhost’了吗? - nil
是的,我已经尝试过了,但没有成功。我正在研究System.Net.HttpClient.Win.pas单元——看起来除非您指定ProxyUserName,否则代理根本不会被设置。即使这样,它最终仍然没有在HTTP请求中设置。 - Jonathan Wareham
显示剩余3条评论
1个回答

0
问题是由于Datasnap.DSHTTPClient.pas单元中TDSHTTP.PrepareRequest过程中的一个错误引起的:
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;

代码仅在指定代理用户名时应用代理服务器设置,而实际上无论如何都应该应用这些设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接