2017-08-04 32 views
12

Tôi đang kết nối với máy chủ DataSnap bằng lớp proxy máy khách DS được tạo, thông qua TDSRESTConnection. Kết nối hoạt động tốt và tôi có thể gọi các phương thức máy chủ. Bây giờ tôi muốn kết nối thông qua một máy chủ proxy, vì vậy tôi đang thiết lập các thuộc tính trên đối tượng TDSRESTConnection, nhưng tôi có thể thấy rằng không có gì được gửi qua máy chủ proxy, như thể các thuộc tính đang bị bỏ qua. Mã của tôi là như sau: Thiết lậpDelphi Seattle DataSnap Client - cài đặt máy chủ proxy không hoạt động

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

Tôi cũng đã cố gắng:

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

Cả hai không có hiệu lực. Tuy nhiên tôi biết mã này đang làm việc trong phiên bản trước của Delphi tôi đã sử dụng đó là XE6. Vấn đề có vẻ là đang di chuyển đến XE10.

Ai có thể làm sáng tỏ điều này không?

+0

Phiên bản XE6 có thực sự hoạt động trên cùng một máy như bạn không thể làm việc với phiên bản "XE10" không? Btw, không có XE10, phiên bản post-XE8 là Seattle, Berlin và Tokyo - cái nào trong số đó * là * bạn sử dụng? – MartynA

+0

Hi, có nó hoạt động tốt trong XE6 trên cùng một PC. Xin lỗi, tôi đang sử dụng Delphi Seattle. –

+0

Bạn có cần Đặt lại hoặc mở lại kết nối sau khi thay đổi các thuộc tính của nó không? – nil

Trả lời

0

Vấn đề là do một lỗi trong các đơn vị Datasnap.DSHTTPClient.pas trong thủ tục 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; 

Mã này được chỉ áp dụng các thiết lập máy chủ proxy nếu một tên người dùng proxy được chỉ định, trong khi đó nên luôn áp dụng các cài đặt bất kể.

Các vấn đề liên quan