2011-05-11 110 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中正常工作,並且「需要授權」可能無法登錄到螳螂 可能是您在螳螂帳戶中更改了自己的密碼。