Неустранимая ошибка: исключение Uncaught SoapFault: [WSDL] - PullRequest
2 голосов
/ 05 февраля 2011

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

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
  Couldn't load from 'http://XXX.XXX.XXX.XXX/test.asmx?wsdl'
  in /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php:101

Stack trace:
  #0 /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php(101):
    SoapClient->SoapClient('http://XXX.XXX.XXX.XXX/', Array) #1 {main} thrown
    in /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php
    on line 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, если это поможет. Я просматривал множество постов на разных форумах, пытаясь выяснить, в чем проблема. У многих людей была такая же проблема, но ни одно из найденных мной решений не помогло мне. Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

1 голос
/ 15 марта 2011

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

0 голосов
/ 07 марта 2014

Добавление 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)
0 голосов
/ 24 января 2013

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

удалить ";"

0 голосов
/ 10 марта 2011

Если вы используете nusoap (у php 5.2 есть собственный soapclient, который я предпочитаю), первое, что я вижу, это ваши аргументы Аргумент № 2 для конструктора soapclient в nusoap должен быть логическим ИСТИНОЙ, если вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...