2013-03-28 15 views
9

मैं वेब सेवाओं के लिए नया हूं। मैं अनजाने में यादृच्छिक साबुन क्लाइंट कन्स्ट्रक्टर निष्पादन समय का अनुभव कर रहा हूँ। आमतौर पर कॉल में लगभग 10 सेकंड लगते हैं। कभी-कभी इसमें एक सेकंड से भी कम समय लगता है, लेकिन यह घटना कम बार-बार होती है।PHP सोप क्लाइंट कन्स्ट्रक्टर बहुत धीमा

PHP SoapClient Constructor extremely slow

PHP: SoapClient constructor is very slow (takes 3 minutes)

Connecting to WCF Web Service is inexplicably slow

मेरे स्थिति ऊपर धागे में उन लोगों के लिए समान है, लेकिन उन में प्रदान की समाधान मेरी समस्या का समाधान नहीं किया।

// config params 
$params = array(
    'trace'  => 1, 
    'soap_version' => SOAP_1_1, 
    'cache_wsdl' => WSDL_CACHE_MEMORY 
); 
// this call takes about 10 seconds to remote WSDL 
$soap_client = new SoapClient(WSDL_URL,$params); 

मैं अलग wsdl कैशिंग मानकों के साथ खेला और WSDL_CACHE_MEMORY पाया सबसे तेजी से होने के लिए है। अन्य कैशिंग विकल्पों का उपयोग करते समय, कॉल औसत पर लगभग 25 सेकंड लेता है।

मैं एकाधिक उपयोगकर्ताओं का उपयोग नहीं कर रहा हूं।

मैंने wsdl_cache_dir को php.ini में एक विंडोज फ्रेंडली निर्देशिका में बदल दिया है।

मेरा प्रश्न है दो गुना:

  1. क्यों SoapClient निर्माता प्रतीत होता है कि कब तक यह निष्पादित करने के लिए ले जाता है में यादृच्छिक है? यह आमतौर पर अधिक समय क्यों लेता है लेकिन फिर कभी-कभी केवल एक विभाजित दूसरा लेता है? क्या कोई परीक्षण है जो मैं यह सीखने के लिए कर सकता हूं कि यह इस तरह से क्यों व्यवहार कर रहा है?

  2. क्या मुझे सोप क्लाइंट ऑब्जेक्ट या संसाधन को कैशिंग/सहेजना चाहिए ताकि जब मेरा पृष्ठ विज़िटर पृष्ठ से पृष्ठ पर जाएं, मुझे एक नया साबुन क्लाइंट बनाने की आवश्यकता नहीं है और फिर से WSDL को फिर से पार्स करने की आवश्यकता नहीं है? इसे पूरा करने के लिए अनुशंसित दृष्टिकोण क्या है?

सही दिशा में कोई भी मदद या झुकाव बहुत बाध्य होगा। धन्यवाद।

+0

स्रोत के रूप में इस्तेमाल कर सकते हैं WSDL फ़ाइल स्थानीय या दूरदराज है? – datasage

+0

@ डेटासेट मैंने दोनों की कोशिश की। स्थानीय पहले, फिर रिमोट। रिमोट के साथ तेज निष्पादन समय। – cre8value

+0

सोपाई के साथ एक परीक्षण क्लाइंट बनाने का प्रयास करें - http://www.soapui.org/ क्या यह धीमा है? – herrjeh42

उत्तर

11

टीटीएल

टीटीएल को परिभाषित करता है कितनी देर तक डबल्यूएसडीएल कैश में रहती है की जाँच करें।

soap.wsdl_cache_ttl integer 

सेकंड की संख्या (जीने के लिए समय) है कि संचित फ़ाइलों को मूल के स्थान पर किया जाएगा सेट करता है।

http://www.php.net/manual/en/soap.configuration.php#ini.soap.wsdl-cache-ttl

स्टोर डबल्यूएसडीएल स्थानीय स्तर पर

इसके अलावा, आप डबल्यूएसडीएल स्थानीय फाइल सिस्टम को डाउनलोड करने और के लिए SoapClient

$client = new SoapClient("file://path/wsdl.file", array(
    'location' => "http://domain/ws-endpoint", 
)); 
+0

+1। – GordonM

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