致命错误:未捕获SoapFault异常:[WSDL]
我无法调用从PHP设置的Web服务。以下错误消息中的模糊地址http://XXX.XXX.XXX.XXX/test.asmx?wsdl
将返回有效的WSDL。我已经成功地试图称呼其为使用VB.net客户端的Web服务,但是当我把它从PHP在Debian我得到以下信息:致命错误:未捕获SoapFault异常:[WSDL]
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
还有什么问题呢?我已经将我的代码包含在下面的Web服务和PHP客户端中。
Web服务:
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如果这是任何帮助。我在不同的论坛上经历了很多帖子,试图找出问题所在。很多人都遇到同样的问题,但迄今为止我找到的解决方案都不适合我。任何帮助将不胜感激。
如果你正在使用nusoap(php 5.2有一个本地soapclient,我更喜欢),我看到的第一件事就是你的论点。如果您使用的是WSDL,而不是数组,则nusoap的soapclient构造函数的参数#2应为布尔值TRUE。尝试:
$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。
另一个选项是cURL。您可以将您的有效内容创建为XML字符串,并使用cURL将其发送到相同的URL。然后,您需要捕获响应代码并酌情处理。当我遇到SOAPClient的问题时,我转移到cURL--像魅力一样工作。
尝试打开php.ini中的php_soap.dll和php_openssl.dll。 位于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)
工作,我不知道这是什么可能,但是,是否有可能为你尝试的NuSOAP? – Nacho 2011-03-10 01:37:43
尝试在创建SoapClient对象的地方围绕行包装try..catch块。不要忘了catch应该是一个SoapFault类型 - 例如catch(SoapFault $ e){}而不是catch(Exception $ e){} 在catch中,可以查询异常字段,(getMessage等)或var_dump例外,然后发布它告诉你的内容。 – Stephen 2011-03-10 03:44:49
你可以发布wsdl吗? – zode64 2011-03-12 00:39:40