2012-08-29 7 views
5

डेटास्नाप सर्वर से कनेक्ट करने के लिए डेल्फी XE2 में TSQLConnection घटक का उपयोग करना।XE2 में एक TSQLConnection कनेक्ट प्रयास को कैसे रोकें?

मेरी समस्या यह है कि यदि हम 3 सेकंड के बाद कनेक्ट करने में असमर्थ हैं, तो मैं कनेक्शन प्रयास को निरस्त करना चाहता हूं, हालांकि ड्राइवर की कनेक्टटाइमआउट प्रॉपर्टी को कोई प्रभाव नहीं पड़ता है (यह अभी भी लगभग 20 सेकंड तक प्रतीक्षा करता है छोड़ने से पहले)।

मैं इसे थ्रेड के अंदर चला रहा हूं और इसलिए मैं थ्रेड पर एक संदेश पोस्ट कर सकता हूं (कैसे थ्रेड मैसेज कतार सेवा की जाती है, मुझे लगता है कि यह अवरोधन कॉल कैसे बनाया गया था)। यहां तक ​​कि अगर मेरा थ्रेड मैसेज हैंडलर भाग गया, तो भी मुझे यकीन नहीं है कि मैं TSQLConnection को सेट करने के लिए कॉल को अवरुद्ध करने में कैसे बाधा डालूंगा। कनेक्ट की गई संपत्ति (जो थ्रेड के निष्पादन विधि के भीतर सेट है)।

मैं टर्मिनेट थ्रेड को कॉल नहीं करना चाहता क्योंकि यह ओवरकिल लगता है और थ्रेड के ढेर को आवंटित स्मृति (अगर मैं सही ढंग से समझता हूं) छोड़ दूंगा। इस कनेक्शन प्रक्रिया को बाधित करने के बारे में कोई भी विचार, या अंतर्निहित इंडी घटकों तक पहुंचें और स्पष्ट रूप से कनेक्शन टाइमआउट सेट करें, इसकी सराहना की जाएगी।

धन्यवाद!

fConnection := TSQLConnection.Create(nil); 
with fConnection do 
begin 
    DriverName := 'DataSnap'; 
    Params.Values['CommunicationProtocol'] := 'tcp/ip'; 
    Params.Values['DatasnapContext'] := 'datasnap/'; 
    Params.Values['HostName'] := '127.0.0.1'; 
    Params.Values['Port'] := '211'; 
    Params.Values['ConnectTimeout'] := '3000'; 
    KeepConnection := true; 
    LoginPrompt := true; 
end; 

// Where it blocks for up to 20 seconds (if host unavailable) 
fConnection.Connected := True; 

उत्तर

1

मैं इस बारे में सोचते हैं और अगर ConnectTimeout तो काम नहीं यदि आप किसी अन्य तरीके से इस का समाधान कर सकते

पहले से पहले जैसे इंडी घटक द्वारा पिंग गंतव्य की मेजबानी के लिए कोशिश (यदि यह स्थानीय होस्ट नहीं है कनेक्ट; -)) या बेहतर टेलनेट सेवा पोर्ट (इंडी द्वारा भी) का प्रयास करें - मुझे लगता है कि यह सबसे आसान विचार है कि आप थ्रेड को मारने के बिना अब क्या कर सकते हैं

+0

समस्या यह है कि फ़ायरवॉल को आईसीएमपी की अनुमति देने की आवश्यकता होगी। मुझे एहसास है कि उदाहरण लोकहोस्ट से कनेक्शन दिखाता है लेकिन मुझे नहीं लगता कि एक अलग प्रोटोकॉल का उपयोग इस मामले में ठीक है। अगर मुझे गलत समझा गया है तो मुझे बताएं। – Duncan

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