PHP SoapClient zaman aşımına

5 Cevap php

Ben üzerinde hizmet koşuyorum aynı sunucudan test amaçlı bir Soap Client aramaya çalışıyorum. Benim WSDL yer almaktadır: http://www.installittoday.com/api/server.php?wsdl Ben sadece onu yüklemeye çalışıyorum:


    $client = new SoapClient('http://www.installittoday.com/api/server.php?wsdl');
but I get back the error:

Warning: SoapClient::SoapClient(http://www.installittoday.com/api/server.php?wsdl) [soapclient.soapclient]: failed to open stream: Connection timed out in /home/installi/public_html/api/client.php on line 4  

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php on line 4  

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.installittoday.com/api/server.php?wsdl' : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php:4 Stack trace: #0 /home/installi/public_html/api/client.php(4): SoapClient->SoapClient('http://www.inst...') #1 {main} thrown in /home/installi/public_html/api/client.php on line 4

Yine de benim başka bir siteden sadece iyi müşteri kurabilirsiniz. Bu bir güvenlik duvarı sorunu ya da ne mi?

5 Cevap

Ayrıca burada ince yüklerken.

Bir web tarayıcısı ile müşteri istediğiniz siteden bağlanmayı deneyin veya hiçbir vekil ile bir uzak makine kullanımı kıvrılmasını kurmak eğer:

curl http://www.installittoday.com/api/server.php?wsdl

Hatta makine aracılığıyla bu siteye bir bağlantı alabilirsiniz olmadığını söyleyecektir.

Ayrıca birden CONNECT deneyin, ya da makine bağlantı hızı sıkışık / sınırlı ise default_socket_timeout artan olabilir.

Ne bağlantı noktaları üzerinden bağlanmaya çalışıyorsunuz?

Bu uzantıların php.ini etkin olduğundan emin olun

extension=php_curl.dll 
extension=php_openssl.dll 
extension=php_soap.dll

Bu hata karşısında geliyor herkes için. Php.ini veya SOAP çağrı bir parametre ya, WSDL önbelleğini devre dışı bırakmayı deneyin.

Sorun varsayılan PHP temp klasöründe WSDL dosyası önbelleğe vardır. Dosyayı ilk önbelleğe sonra, PHP bu dosyayı kullanarak tutar. Sadece 24 saat (önbellek için varsayılan ttl) sonra yenilenir.

Eğer WSDL dosya değiştirmek Yani, PHP pikap OP gibi bir hata sonucu, eskisini olacak. Matt, senin sorunun önbelleğe asla bir dosyayı başvururken kullanılarak çözüldü.

Sunucu dosyasını isteyin ve sonra getiriliyor ve işleme biraz sürer, bunu ayrıştırmak zorunda çünkü varsayılan olarak önbelleğe nedeni.

Siz php.ini ilgili değişkeni değiştirebilir veya SOAP çağrı ile birlikte param göndermek ya iki seçeneğiniz var.

Örneğin:

$client = new SoapClient($webservice, array('classmap' => $soap_class_map, 'cache_wsdl' => WSDL_CACHE_NONE));

Umarım bu yardımcı olur.

OP yine burada.

Biraz daha bağlam: ben installittoday.com üzerine hizmetini (tabii ki) ev sahipliği yapıyorum. Ben de sadece test amaçlı aynı yerden bir istemci çalıştırmak çalışıyorum. Ben gayet denedim tam anlamıyla her siteden servise bağlanabilir ve başarıyla installittoday barındırılan Client ile birkaç WSDLs açtım. Bu site nedense kendisine bağlanmak edemez görünüyor.

Umarım bir sıkışık satır mesele şüpheliyim.

Şimdi ele verdik, bu kadar ben eksik bir liman şey var sürece bu sorun muhtemelen, Apache yapılandırma sorunu çeşit SOAP ötesine uzanır biliyoruz. Ben SOAP açık olduğundan emin olun kimse yoktur, farklı herhangi bir port kurmak değil mi?

Ben bağımsız bir dosya olarak dinamik olarak oluşturulan NuSOAP WSDL kaydederek, bu sorunu çözmüş ve tüm iyi çalışıyor gibi görünüyor. Ben bu durumda olurdu neden hiçbir fikrim yok.

Ben sadece WSDL oluşturmak için NuSOAP kullanıyordum, zaten PHP5'ta taşımak planlıyorum.