2011-05-11 111 views
6

我有一个在Delphi 2009上编写的程序。它使用基于SSL的SOAP over HTTP。因此,触发HTTP请求的SOAP请求由Microsoft Internet Explorer通过DLL处理。然后MSIE将弹出一个要求登录的弹出窗口。Delphi XE + SOAP + SSL

但现在我需要在Delphi XE中编译它,并且我遇到了问题。程序不想在SSL中登录。根本没有弹出。所以,似乎触发器不想工作。

出现在此代码的第二行中的错误:

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

该错误是

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

清单的连接过程是

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是的一部分

MantisConnectPortType = interface(IInvokable) 

一个具有声明:

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

在浏览器和旧的exe在2009年编制的工作正常。请帮助解决这个问题。 塔拉斯,基辅

+0

检查您的证书是他们应该在哪里...并向我们展示客户拿到证书的代码。 – Sam 2011-05-18 05:58:05

回答

2

如果德尔福2009年从exe文件在同一台PC因为你正在测试的德尔福XE EXE“工作正常” ,然后一些代码有可能(最有可能)的时间Delphi2009之间变化编译.exe文件并编译DelphiXE.exe。

要测试代码是否是问题,请尝试在Delphi 2009中重新编译新的代码(来自Delphi XE版本),并查看它是否有效。如果它有效,那么Delphi XE可能会以不同的方式处理Delphi 2009中的证书。如果它不起作用,那么代码已经发生了很大的变化,在这种情况下,您需要调试从证书存储库中获取证书的代码。

证书可以安装到内置Windows证书存储区中的各个位置。有时,人们只需双击,并将缺省值保留在证书导入向导中(从而选择“自动选择证书位置”),这可能会导致证书安装在current_user的证书存储区中。如果发生这种情况,那么exe文件只能在相同的windows用户帐户下运行时才能拿到证书。

事实上,您获得了“需要授权”消息指向证书问题。但是,如果您是从不同的PC进行测试,那么也可能存在防火墙/企业安全问题。

0

您的代码也可以在Delphi XE2中正常工作,并且“需要授权”可能无法登录到螳螂 可能是您在螳螂帐户中更改了自己的密码。