Неустранимая ошибка: исключить исключение SoapFault:

У меня возникли проблемы с вызовом веб-сервиса, который я установил из PHP. http://XXX.XXX.XXX.XXX/test.asmx?wsdl адрес http://XXX.XXX.XXX.XXX/test.asmx?wsdl в приведенном ниже сообщении об ошибке возвращает действительный WSDL. Я успешно пытался назвать его веб-сервисом с помощью клиента VB.net, но когда я его вызываю из PHP на Debian, я получаю следующее сообщение:

 Неустранимая ошибка: исключение SoapFault: [WSDL] SOAP-ERROR: анализ WSDL:
   Не удалось загрузить из «http://XXX.XXX.XXX.XXX/test.asmx?wsdl»
   в /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php:101

 Трассировки стека:
   # 0 /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php(101):
     SoapClient-> SoapClient ('http://XXX.XXX.XXX.XXX/', Array) # 1 {main} throw
     в /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php
     в строке 101

В чем проблема? Я включил свой код для веб-службы и клиента PHP ниже.

Веб-сервис:

 Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.ComponentModel ... ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. ' <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class WebService1 Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function End Class 

PHP-клиент:

 require_once($_SERVER['DOCUMENT_ROOT']."/catalog/fomeus/includes/soap/nusoap.php"); $objClient = new soapclient("http://XXX.XXX.XXX.XXX/test.asmx?wsdl", array('trace' => 1, 'exception' => 0, 'cache_wsdl' => 0)); print_r($objClient -> HelloWorld()); 

Я использую PHP версии 5.2.6, если это поможет. Я занимаюсь множеством сообщений на разных форумах, пытаясь выяснить, в чем проблема. У многих людей была такая же проблема, но ни одно из решений, которые я нашел до сих пор, не работает для меня. Любая помощь будет принята с благодарностью.

Еще один вариант – cURL. Вы можете создать свою полезную нагрузку в виде строки XML и отправить ее на тот же URL-адрес, используя cURL. Затем вам необходимо будет зафиксировать код ответа и обработать его соответствующим образом. Когда у меня возникли проблемы с SOAPClient, я перешел в cURL – работает как шарм.

Если вы используете nusoap (php 5.2 имеет собственный soapclient, который я предпочитаю), первое, что я вижу, это ваши аргументы. Аргумент №2 для конструктора soapclient nusoap должен быть здесь логическим TRUE, если вы используете WSDL, а не массив. Пытаться:

 $objClient = new soapclient("http://XXX.XXX.XXX.XXX/test.asmx?wsdl",true); print_r($objClient->HellowWorld()); 

Вот как я смог работать с wsdl в прошлом.

Если вы используете собственный клиент и имеете проблемы с wsdl, вы всегда можете обойти его и выполнить прямые вызовы, например:

 $objClient = new soapclient(null,array('uri'=>'http://xxx/test.asmx','location'=>'http://xxx/test.asm')); $objClient->__call('HelloWorld',array()); 

Это должно работать, но не так легко ориентироваться как wsdl.

попробуйте включить php_soap.dll и php_openssl.dll в php.ini. Расположен в папке apache \ apache \ apache2.4.2 \ bin

удалить ";"

Добавление index.php для меня работало в php-приложении

 $client = new SoapClient('http://www.domain.com/api/v2_soap/?wsdl'=1) $client = new SoapClient('http://www.domain.com/index.php/api/v2_soap/?wsdl'=1)