2010-05-24 15 views
5

में वेब सेवा समय त्रुटियों में मेरे पास एक क्लाइंट एप्लिकेशन है जो SOAP अनुरोध करता है। मैंने टाइमआउट को 20 मिनट तक सेट कर दिया है। हालांकि, कभी-कभी मुझे 10 सेकंड के बाद होने वाली टाइमआउट त्रुटि दिखाई देती है। मैं कोड में निम्नलिखित है:डेल्फी

RIO.HTTPWebNode.ReceiveTimeout := 1200000 

मैं ConnectTimeout और SendTimeOut निर्धारित करने की आवश्यकता है? वर्तमान में वे 0 के डिफ़ॉल्ट मान पर सेट हैं। इन्हें कौन सा अंतर स्थापित करेगा?

मैं डेल्फी 2007

उपयोग कर रहा हूँ त्रुटि संदेश मैं देख रहा हूँ मैं पर आगे देख रहे हैं "प्रचालन का समय समाप्त ...."। तो क्या मुझे अपना ReceiveTimeOut शून्य पर सेट करना चाहिए क्योंकि मुझे वास्तव में कोई टाइमआउट नहीं चाहिए?

+0

हम वर्तमान में सर्वर पर बड़ी मात्रा में डेटा भेज रहे हैं, क्या मुझे बस ReceiveTimeOut 0 पर सेट करना चाहिए? हालांकि यह अभी भी समझा नहीं गया है कि मुझे "कभी-कभी" 10 सेकेंड के बाद एक समय मिलता है ... –

उत्तर

8

कोडगियर का SOAPHTTPTrans कार्यान्वयन प्रति सत्र नहीं, वैश्विक स्तर पर टाइमआउट सेट करता है।

{ Timeouts } 
if FConnectTimeout > 0 then 
    Check(not InternetSetOption({Request}nil, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FConnectTimeout), SizeOf(FConnectTimeout))); 
if FSendTimeout > 0 then 
    Check(not InternetSetOption({Request}nil, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FSendTimeout), SizeOf(FSendTimeout))); 
if FReceiveTimeout > 0 then 
    Check(not InternetSetOption({Request}nil, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FReceiveTimeout), SizeOf(FReceiveTimeout))); 

क्या मैं समय समाप्ति सेट करने के लिए उपयोग करने के लिए है OnBeforePost हैंडलर करना पड़ा है:: यहाँ THTTPReqResp.Send से प्रासंगिक कोड है

transport.OnBeforePost := configureHttpRequest; 

procedure Tsomething.configureHttpRequest(const HTTPReqResp: THTTPReqResp; Data: Pointer); 
begin 
    InternetSetOption(Data, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FconnectTimeoutMS), SizeOf(FconnectTimeoutMS)); 
    InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FsendTimeoutMS), SizeOf(FsendTimeoutMS)); 
    InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FreceiveTimeoutMS), SizeOf(FreceiveTimeoutMS)); 
end; 

इन विकल्पों के लिए MSDN प्रलेखीकरण http://msdn.microsoft.com/en-us/library/aa385328%28VS.85%29.aspx

में पाया जाता है
+0

आपको बहुत अधिक ग्लोब धन्यवाद। कोई विचार है कि मुझे कुछ सेकंड के बाद भी एक समय समाप्त ऑपरेशन क्यों मिलेगा? –

+0

नहीं, 10 सेकंड नहीं। डिफ़ॉल्ट टाइमआउट स्थापित आईई संस्करण के साथ बदलता है - आईई 7 के साथ यह 30 सेकंड है। और चूंकि डिफ़ॉल्ट कोड वैश्विक स्तर पर टाइमआउट सेट करता है, तो आप समस्या को हिट कर सकते हैं अन्य कोड टाइमआउट को बदलना चाहिए। मैं हमेशा अपने उत्तर में कोड के अनुसार समय सीमा निर्धारित करता हूं। – glob