2012-07-31 28 views
7

我已經使用WSDL導入程序與德爾福XE2,它已生成一個例程,看起來像下面,不包括我試圖使用代理服務器的3條評論線。德爾福THTTPRio如何使用身份驗證代理服務器

function GetIXYZService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IXYZService; 
const 
    defWSDL = 'https://server/XYZService.svc?wsdl'; 
    defURL = 'https://server/XYZService.svc'; 
    defSvc = 'Company.XYZ.Services.XYZService'; 
    defPrt = 'BasicHttpBinding_IXYZService'; 
var 
    RIO: THTTPRIO; 
begin 
    Result := nil; 
    if (Addr = '') then 
    begin 
    if UseWSDL then 
     Addr := defWSDL 
    else 
     Addr := defURL; 
    end; 
    if HTTPRIO = nil then 
    RIO := THTTPRIO.Create(nil) 
    else 
    RIO := HTTPRIO; 
    try 
    // RIO.HTTPWebNode.Proxy := 'server_ip:port'; 
    // RIO.HTTPWebNode.Username := 'username'; 
    // RIO.HTTPWebNode.Password := 'password'; 

    Result := (RIO as ISSOService); 
    if UseWSDL then 
    begin 
     RIO.WSDLLocation := Addr; 
     RIO.Service := defSvc; 
     RIO.Port := defPrt; 
    end else 
     RIO.URL := Addr; 
    finally 
    if (Result = nil) and (HTTPRIO = nil) then 
     RIO.Free; 
    end; 
end; 

我需要通過身份驗證代理服務器訪問服務。我添加了上面顯示的3行,當我取消註釋時,我無法連接。對於THTTPRIO各國幫助...

如果你需要使用代理服務器,或者如果服務器要求身份驗證 ,使用THTTPReqResp對象,它是 的HTTPWebNode屬性的值提供的屬性必要的 信息。

這我都做了,但是當我試圖用我的服務的ESOAPHTTPException升高有消息...

Unauthorized (407) - 'https://server/XYZService.svc' 

我已經在這個職位上說,後設置的代理設置絆倒設置我試過的WSDLLocation,Service和Port,但沒有成功。

http://www.delphigroups.info/2/10/555621.html

我也不會定義USE_INDY建設。我的服務使用SSL,因此我使用WinInet。

我不確定這種方法有什麼問題,所以任何幫助表示讚賞。

感謝, 邁克爾

回答

2

this,有2種方式來設置代理授權WININET。我在Soap.SOAPHTTPTrans的源代碼中沒有看到任何HTTP_STATUS_PROXY_AUTH_REQ,所以您可能必須編寫自己的錯誤處理。爲此,請設置THTTPReqResp.OnWinInetError處理程序並處理HTTP_STATUS_PROXY_AUTH_REQ錯誤代碼。

或者您可以嘗試捕獲THTTPReqResp的OnBeforePost並使用base64編碼的一對登錄名和密碼調用HttpAddRequestHeaders。 希望它有幫助。

相關問題