2012-07-31 6 views
7

Ho utilizzato l'importatore WSDL con Delphi XE2 e ha generato una routine simile alla seguente, escluse le 3 righe commentate in cui sto tentando di utilizzare un server proxy.Delphi THTTPRio come utilizzare il server proxy di autenticazione

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; 

Ho bisogno di accedere al servizio tramite un server proxy di autenticazione. Ho aggiunto le 3 linee mostrate sopra e quando le ho decomposte non riesco a connettermi. L'aiuto per THTTPRio Uniti ...

Se è necessario utilizzare un server proxy, o se il server richiede l'autenticazione , utilizzare le proprietà dell'oggetto THTTPReqResp cioè il valore della proprietà HTTPWebNode per fornire il necessarie informazioni .

Questo ho fatto, ma quando tento di usare il mio servizio un ESOAPHTTPException è sollevata con un messaggio ...

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

Ho inciampato su questo post che dice di impostare le impostazioni proxy dopo impostazione di WSDLLocation, servizio e porta che ho provato senza successo.

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

Sono anche non edificabili con USE_INDY definito. Il mio servizio utilizza SSL, quindi sto utilizzando WinInet.

Non sono sicuro di ciò che è sbagliato in questo approccio, quindi qualsiasi aiuto è apprezzato.

Grazie, Michael

risposta

2

Secondo this, ci sono 2 modi per impostare l'autorizzazione proxy per WinInet. Non ho visto alcun HTTP_STATUS_PROXY_AUTH_REQ nel codice sorgente di Soap.SOAPHTTPTrans, quindi probabilmente dovrai scrivere la tua stessa gestione di questo errore. Per fare ciò, impostare il gestore THTTPReqResp.OnWinInetError ed elaborare il codice di errore HTTP_STATUS_PROXY_AUTH_REQ.

Oppure si può provare a prendere l'OnBeforePost di THTTPReqResp e chiamare HttpAddRequestHeaders con coppia codificata base64 di login e password. Spero che aiuti.