2012-07-31 18 views
7

मैंने डेलफी XE2 के साथ डब्लूएसडीएल आयातक का उपयोग किया है और यह एक नियमित रूप से उत्पन्न होता है जो 3 टिप्पणी वाली लाइनों को छोड़कर, जहां मैं प्रॉक्सी सर्वर का उपयोग करने का प्रयास कर रहा हूं।डेल्फी THTTPRio प्रमाणीकरण प्रॉक्सी सर्वर का उपयोग कैसे करें

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; 

मुझे प्रमाणीकरण प्रॉक्सी सर्वर के माध्यम से सेवा तक पहुंचने की आवश्यकता है। मैंने उपरोक्त दिखाए गए 3 लाइनों को जोड़ा है और जब मैं उन्हें असम्बद्ध करता हूं तो मैं कनेक्ट नहीं कर सकता। THTTPRio राज्यों के लिए मदद ...

आप किसी प्रॉक्सी सर्वर का उपयोग करने के लिए, या यदि सर्वर प्रमाणीकरण की आवश्यकता है, THTTPReqResp वस्तु है कि HTTPWebNode संपत्ति के मूल्य प्रदान करने के लिए के गुणों का उपयोग की जरूरत है आवश्यक जानकारी।

यह मैंने किया है, लेकिन जब मैं अपने सेवा का उपयोग करने का प्रयास एक ESOAPHTTPException होने संदेश उठाया है ...

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

मैं इस पोस्ट के बाद प्रॉक्सी सेटिंग्स सेट करने के लिए कहते हैं पर ठोकर खाई गए WSDLLocation, सेवा, और पोर्ट को सेट करना जिसे मैंने सफलतापूर्वक नहीं किया है।

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

मैं भी परिभाषित USE_INDY साथ निर्माण नहीं कर रहा हूँ। मेरी सेवा एसएसएल का उपयोग करती है इसलिए मैं WinInet का उपयोग कर रहा हूं।

मुझे यकीन नहीं है कि इस दृष्टिकोण में क्या गलत है, इसलिए किसी भी मदद की सराहना की जाती है।

धन्यवाद, माइकल

उत्तर

2

this के अनुसार, वहाँ WinInet के लिए प्रॉक्सी प्राधिकरण स्थापित करने के लिए 2 तरीके हैं। मैंने Soap.SOAPHTTPTrans के स्रोत कोड में कोई HTTP_STATUS_PROXY_AUTH_REQ नहीं देखा है, इसलिए आपको शायद इस त्रुटि का अपना स्वयं का प्रबंधन लिखना होगा। ऐसा करने के लिए, THTTPReqResp.OnWinInetError हैंडलर सेट करें और HTTP_STATUS_PROXY_AUTH_REQ त्रुटि कोड को संसाधित करें।

या आप THTTPReqResp के OnBeforePost को पकड़ने का प्रयास कर सकते हैं और लॉगिन और पासवर्ड की बेस 64 एन्कोडेड जोड़ी के साथ HttpAddRequestHeaders को कॉल कर सकते हैं। उम्मीद है कि यह मदद करता है।

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