2012-07-31 34 views
7

He utilizado el importador WSDL con Delphi XE2 y ha generado una rutina que se ve como la siguiente, con exclusión de las 3 líneas comentadas en las que intento usar un servidor proxy.Delphi THTTPRio cómo usar el servidor proxy de autenticación

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; 

Necesito acceder al servicio a través de un servidor proxy de autenticación. He agregado las 3 líneas que se muestran arriba y cuando las descomente no puedo conectarme. La ayuda para los estados THTTPRio ...

Si es necesario utilizar un servidor proxy, o si el servidor requiere autenticación , utilizar las propiedades del objeto THTTPReqResp es decir el valor de la propiedad para proporcionar el HTTPWebNode información necesaria .

Esto lo he hecho, pero cuando intento utilizar mi servicio un ESOAPHTTPException se eleva con mensaje ...

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

me ha tropezado con este post que dice que para establecer la configuración del proxy después estableciendo WSDLLocation, Service y Port que he intentado sin éxito.

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

estoy tampoco edificio con USE_INDY definido. Mi servicio usa SSL, así que estoy usando WinInet.

No estoy seguro de lo que está mal con este enfoque por lo que cualquier ayuda es apreciada.

Gracias, Michael

Respuesta

2

Según this, hay 2 formas de establecer la autorización proxy para wininet. No he visto ningún HTTP_STATUS_PROXY_AUTH_REQ en el código fuente de Soap.SOAPHTTPTrans, por lo que probablemente tenga que escribir su propio manejo de este error. Para hacerlo, configure el controlador THTTPReqResp.OnWinInetError y procese el código de error HTTP_STATUS_PROXY_AUTH_REQ.

O puede tratar de atrapar el OnBeforePost de THTTPReqResp y llamar a HttpAddRequestHeaders con un par de inicios de sesión y una contraseña codificados en base64. Espero que ayude.

Cuestiones relacionadas