2011-05-11 29 views
6

Tengo un programa que se escribió en Delphi 2009. Utiliza SOAP a través de HTTP a través de SSL. Por lo tanto, es la solicitud SOAP la que activa una solicitud HTTP, que maneja Microsoft Internet Explorer a través de una DLL. MSIE luego hará una ventana emergente que solicita el inicio de sesión.Delphi XE + SOAP + SSL

Pero ahora tengo que compilarlo en Delphi XE y tengo un problema. programa no quiere iniciar sesión en SSL. Sin ventana emergente en absoluto. Entonces, parece que el desencadenador no quiere funcionar.

El error aparece en la segunda línea de este código:

mantis:=GetMantisConnectPortType(false, mantisurl); 
mi := mantis.mc_issue_get(username,password,MantisIssue); 

El error es

Project IssueReporter.exe raised exception class ESOAPHTTPException with message 'Authorization Required (401) - 'https://***/mantis/api/soap/mantisconnect.php''. 

Listado del procedimiento de conexión se

function GetMantisConnectPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): MantisConnectPortType; 
const 
    defWSDL = 'https://***/mantis/api/soap/mantisconnect.php?wsdl'; 
    defURL = 'https://***/mantis/api/soap/mantisconnect.php'; 
    defSvc = 'MantisConnect'; 
    defPrt = 'MantisConnectPort'; 
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 
    Result := (RIO as MantisConnectPortType); 
    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; 

mc_issue_get es una parte de

MantisConnectPortType = interface(IInvokable) 

una tiene la declaración:

function mc_issue_get(const username: string; const password: string; const issue_id: Int64): IssueData; stdcall; 

en el navegador y en el viejo exe compilado en 2009 todo trabaja muy bien. Ayuda por favor para resolver este problema. Taras, Kiev

+0

Compruebe que sus certificados estén donde deberían estar ... y muéstrenos el código donde el cliente recoge el certificado. – Sam

Respuesta

2

Si el Delphi 2009 exe "funciona bien" desde el mismo PC que se está probando el exe Delphi XE, a continuación, algo de código tiene probablemente (muy probablemente) ha cambiado entre el momento en que el Delphi2009 .exe fue compilado y la vez que compiló DelphiXE.exe.

Para probar si el código es el problema, intente volver a compilar nuevo código (de la versión Delphi XE) en Delphi 2009 y vea si eso funciona. Si funciona, entonces Delphi XE probablemente maneja los certificados de manera diferente a Delphi 2009. Si no funciona, el código ha cambiado sustancialmente, en cuyo caso deberá depurar el código que recoge el certificado del almacén de certificados.

Los certificados se pueden instalar en varias ubicaciones dentro del almacén de certificados de Windows incorporado. A veces, las personas simplemente hacen doble clic y conservan los valores predeterminados en el asistente de importación de certificados (seleccionando Elegir automáticamente la ubicación del certificado) lo que puede dar como resultado que el certificado se instale en el almacén de certificados del usuario actual. Si eso sucede, el exe solo podrá recoger el certificado si se ejecuta bajo la misma cuenta de usuario de Windows.

El hecho de que haya recibido un mensaje de Autorización Requerida apunta a un problema de certificado. Sin embargo, si está probando desde diferentes PC, también podría haber problemas de seguridad de firewall/empresa.

0

Su código también funciona bien en Delphi XE2 y "Autorización requerida" podría no iniciar sesión en mantis Puede haber cambiado su contraseña en la cuenta mantis.

Cuestiones relacionadas