2015-05-23 6 views
13

की मेजबानी के लिए कनेक्ट नहीं कर सका मैं साबुन का अनुरोध करता हैपीएचपी SoapClient: SoapFault अपवाद इस कोड का उपयोग

$client = new SoapClient('http://example.com/soap/wsdl'); 

try { 
    $result = $client->myMethod(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

कभी कभी (एक बार दस में से) बनाने के लिए, एक अपवाद उठाया है:

SoapFault अपवाद: [ HTTP]

मेरे प्रयास की मेजबानी के लिए कनेक्ट नहीं कर सका

1) मैं समाधान के लिए देखा है, और I read कि इस समस्या को wsdl कैश के कारण हो सकता है, मैं यह php.ini में अक्षम:

soap.wsdl_cache_enabled = 0 
soap.wsdl_cache_ttl = 0 

कम अपवाद

2) मैं जोड़ने की कोशिश की जन्म देती है

160.XX.XXX.XX example.com 

ra: (वे खिड़कियों पर कर रहे हैं) खिड़कियों के मेजबान windows/system32/drivers/etc/hosts में डीएनएस के समाधान के लिए ises कम अपवाद

3) मैं भी निष्क्रिय करने के लिए "Windows फ़ायरवॉल",

कम अपवाद

4) मैं भी php.ini में default_socket_timeout को बढ़ाने के लिए करने की कोशिश की जन्म देती है की कोशिश की

default_socket_timeout = 90 

कुछ भी नहीं बदला है

प्रश्न

सर्वर साबुन में समस्याएं प्रतीत नहीं होती हैं। इसका उपयोग अन्य साइटों से भी समस्याओं के बिना किया जाता है। क्या मुझे कुछ और करना है?

मेरी सेटिंग्स

पीएचपी 5.6

अपाचे 2.4

विंडोज सर्वर 2012

अद्यतन

कई परीक्षणों के बाद, मुझे लगता है कि समस्या नेटवर्क में है, साबुन सर्वर एक रिवर्स प्रॉक्सी के पीछे है, समस्या प्रॉक्सी में दिखाई देती है।

+1

Soapfault अपवाद एक अपवाद तो एक विधि है -> getMessage() है कि आप बता सकते हैं क्या SoapFault है? –

+0

@ निकोलसएलेक्सेंडर हां, मैं इसे स्पष्ट करने के लिए अपना प्रश्न बदलता हूं –

+0

शायद इससे मदद मिलेगी http://stackoverflow.com/questions/4318870/soapfault-exception-could-not-connect-to-host – aharen

उत्तर

7

आप अपने डिबगिंग प्रयासों को बेहतर बनाने के लिए भी आगे की जरूरत है:

विज्ञापन 1) डबल्यूएसडीएल एक बहुत बदल रहा है? यदि नहीं, WSDL कैशिंग चालू करें। WSDL फ़ाइल लाने के लिए आपको सर्वर से कनेक्ट करने की आवश्यकता नहीं है।

उत्पादन तुम सच में echo $e->getMessage(); में बनाए गए उल्लेख है? आप catch() ब्लॉक के अंदर कुछ डिबगिंग कोड जोड़ सकते हैं, उदाहरण के लिए:

  • जांच आप
  • नहीं तो (उदाहरण के file_get_contents($soap_url) के लिए) किसी अन्य तरीके से सर्वर से कनेक्ट कर सकते हैं, जाँच त्रुटि आप किस तरह हो रही है
    • प्रिंट समय और सर्वर पर एक समस्या पर
    • एक 403 निषिद्ध या इसी तरह की त्रुटि अंक सोप सर्वर पर जाँच त्रुटि लॉग
    • एक एक नेटवर्क समस्या के त्रुटि अंक कनेक्ट नहीं कर सका (विशेष रूप से नहीं है, लेकिन संभावना है कि के लिए अधिक है)
  • आप अगर एक दूसरे की कोशिश को देखने के लिए एक पाश में यह डाल करने के लिए (for ($i = 0; $i <= 5; $i++) { /* ... */ sleep(1); continue; } की तर्ज पर कुछ) की कोशिश कर सकते यह काम करेगा

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

+0

कई परीक्षणों के बाद, मुझे लगता है कि समस्या नेटवर्क में है, साबुन सर्वर एक रिवर्स प्रॉक्सी के पीछे है, समस्या प्रॉक्सी में दिखाई देती है। आपकी मदद के लिए धन्यवाद –

1

आप एक ब्राउज़र में या wget या कुछ एक जैसे के माध्यम से यूआरएल को खोलने की कोशिश की है? फिर एक गजियन बार ताज़ा करने का प्रयास करें, और देखें कि क्या कोई त्रुटि होती है। मेरा अनुमान है

1

करें अगर जिंदा सर्वर पर सक्रिय है रखने के लिए और इसके मापदंडों को बदलने की कोशिश की जाँच है कि यह एक नेटवर्क समस्या है, लेकिन वास्तव में, एक wonky नेटवर्क यह डिबग करने के लिए बहुत मुश्किल है ...। यह डब्लूएसडीएल लाने और भेजने का अनुरोध करने के बीच कनेक्शन के साथ एक समस्या हो सकती है।

WSDL फ़ाइल में परिवर्तन कभी नहीं आता है और यदि यह त्रुटि फिर होता है आप के लिए अक्षम करें और जांच करने के लिए कोशिश कर सकते हैं। बस wsdl को शून्य पर सेट करें और स्थान और यूरी सेट करें।

16

इम सिर्फ इस चलने के लिए एक और संभवतः उपयोगी टिप जोड़ने जा रहा। यह कुछ है जो आपको जांचना चाहिए, यहां पहले से लिखे गए अन्य उपयोगी उत्तरों के अलावा।

यदि आप php 5.5 या उससे अधिक से पीएचपी 5.6 या PHP7 + में नवीनीकृत इस त्रुटि देख सकते हैं। PHP के नए संस्करणों में साबुन के लिए डिफ़ॉल्ट सेटिंग दूरस्थ सहकर्मी को सत्यापित करना है (और इसलिए यह होना चाहिए)। यदि आप एचटीटीपीएस से डब्लूएसडीएल खींच रहे हैं या एचटीटीपीएस एंडपॉइंट है तो यह सीए की जांच करेगा। यदि यह विफल रहता है तो आपको यह विशेष त्रुटि मिल जाएगी।

इसे हल करने के दो तरीके हैं।

1) सबसे सुरक्षित विकल्प सहकर्मी को सत्यापित करना है। उबंटू सिस्टम पर आप certs को /usr/local/share/ca-certificates/ पर कॉपी करेंगे और रूट के रूप में update-ca-certificates चलाएंगे।

2) या आप सत्यापन को अक्षम कर सकते हैं इसका एक उदाहरण यह कैसे करें। - यह आम तौर पर पसंदीदा विकल्प नहीं है, हालांकि यदि समस्या जरूरी है तो यह त्वरित समाधान प्रदान कर सकती है। कृपया अपनी सुरक्षा के साथ मैला मत बनो हालांकि।

$soapClient = new SoapClient($wsdl_url, array(
    //'trace' => 1, 
    'stream_context' => stream_context_create(array(
     'ssl' => array(
      'verify_peer' => false, 
      'verify_peer_name' => false, 
      'allow_self_signed' => true //can fiddle with this one. 
     ) 
    )) 
)); 

मुझे लगता है कि एसओएपी की बात आने पर PHP दस्तावेज थोड़ा खंडित है। और विशेष रूप से एसओएपी डब्ल्यूएसएसई।

+2

बहुत बढ़िया! धन्यवाद दोस्त! – jfoliveira

+0

यहां एक ही समस्या है, इससे समस्या हल हो जाती है, मुझे इसे पहले https://www.howtoforge.com/community/threads/soap-error-could-not-connect-to-host.60623/ (उत्तर में "रेकी ") –

0

उपयोग इस अपनी स्क्रिप्ट में साबुन कैश को साफ़ करने के लिए:

ini_set('soap.wsdl_cache_enabled',0); 
ini_set('soap.wsdl_cache_ttl',0); 
संबंधित मुद्दे