2011-05-11 16 views
6

मेरे पास एक प्रोग्राम है जो डेल्फी 200 9 पर लिखा गया था। यह एसएसएल पर HTTP पर SOAP का उपयोग करता है। तो यह एसओएपी अनुरोध है जो HTTP अनुरोध को ट्रिगर करता है, जिसे एक डीएलएल के माध्यम से माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर द्वारा नियंत्रित किया जाता है। एमएसआईई तब एक पॉपअप करेगा जो लॉगिन के लिए पूछता है।डेल्फी एक्सई + एसओएपी + एसएसएल

लेकिन अब मुझे इसे डेल्फी एक्सई में संकलित करने की आवश्यकता है और मुझे कोई समस्या है। कार्यक्रम एसएसएल में लॉगिन नहीं करना चाहता है। बिल्कुल कोई पॉपअप नहीं। तो, ऐसा लगता है कि ट्रिगर काम नहीं करना चाहता है।

त्रुटि इस कोड की दूसरी पंक्ति में प्रकट होता है:

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; 

ब्राउज़र में और 2009 में संकलित वर्ष exe में सभी ठीक काम करता है। इस समस्या को हल करने के लिए कृपया मदद करें। टारस, कीव

+0

अपने प्रमाणपत्रों की जांच करें जहां वे होना चाहिए ... और हमें वह कोड दिखाएं जहां ग्राहक प्रमाण पत्र उठाता है। – Sam

उत्तर

2

डेल्फी 2009 exe एक ही पीसी से "ठीक काम करता है" अगरआप डेल्फी XE exe परीक्षण कर रहे हैं के रूप में, तो कुछ कोड शायद (सबसे अधिक संभावना) है समय Delphi2009 के बीच बदल .exe संकलित किया गया था और जिस समय आपने DelphiXE.exe संकलित किया था।

यह जांचने के लिए कि कोड समस्या है या नहीं, डेल्फी 200 9 में नया कोड (डेल्फी एक्सई संस्करण से) को पुन: संकलित करने का प्रयास करें और देखें कि क्या यह काम करता है। यदि यह काम करता है, तो डेल्फी एक्सई शायद डेल्फी 200 9 में प्रमाणपत्रों को अलग-अलग संभालता है। यदि यह काम नहीं करता है तो कोड काफी हद तक बदल गया है, इस स्थिति में आपको उस प्रमाणपत्र को डीबग करना होगा जो प्रमाण पत्र स्टोर से प्रमाण पत्र उठाता है।

अंतर्निहित विंडोज प्रमाणपत्र स्टोर के भीतर विभिन्न स्थानों में प्रमाणपत्र स्थापित किए जा सकते हैं। कभी-कभी, लोग केवल डबल-क्लिक करते हैं, और प्रमाणपत्र आयात विज़ार्ड में डिफ़ॉल्ट रखते हैं (इस प्रकार स्वचालित रूप से प्रमाणपत्र स्थान चुनते हैं) जिसके परिणामस्वरूप प्रमाणपत्र को current_user के प्रमाणपत्र स्टोर में स्थापित किया जा सकता है। यदि ऐसा होता है, तो एक्सई केवल उसी विंडो उपयोगकर्ता खाते के अंतर्गत चलने पर प्रमाण पत्र लेने में सक्षम होगा।

तथ्य यह है कि आपको प्रमाण पत्र जारी करने के लिए प्राधिकरण आवश्यक संदेश अंक प्राप्त हुआ है। हालांकि यदि आप विभिन्न पीसी से परीक्षण कर रहे हैं तो फ़ायरवॉल/एंटरप्राइज़ सुरक्षा समस्या भी हो सकती है।

0

आपका कोड डेल्फी XE2 में भी ठीक काम करता है और "प्रमाणीकरण आवश्यक" हो सकता है कि आप मंटिस में लॉगिन नहीं कर सकते हैं, क्या आपने मंटिस खाते में अपना पासवर्ड बदल दिया है।

संबंधित मुद्दे