我在调用我用PHP设置的Web服务时遇到了问题。以下错误消息中的模糊地址http://XXX.XXX.XXX.XXX/test.asmx?wsdl
将返回有效的WSDL。我已成功尝试使用VB.net客户端将其称为Web服务,但是当我在Debian上从PHP调用它时,我收到以下消息:
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客户端。
网络服务:
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,如果有任何帮助的话。我一直在不同论坛上发布大量帖子,试图找出问题所在。很多人都有同样的问题,但到目前为止我找到的解决方案都没有为我工作。任何帮助将不胜感激。
答案 0 :(得分:1)
另一个选择是cURL。您可以将有效负载创建为XML字符串,并使用cURL将其发送到同一URL。然后,您需要根据需要捕获响应代码和进程。当我遇到SOAPClient问题时,我转移到了cURL - 就像一个魅力。
答案 1 :(得分:0)
如果你正在使用nusoap(php 5.2有一个我喜欢的本地soapclient),我看到的第一件事就是你的论点。如果你使用的是WSDL而不是数组,那么nusoap的soapclient构造函数的参数#2应该是boolean 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那样容易导航。
答案 2 :(得分:0)
尝试在php.ini中打开php_soap.dll和php_openssl.dll。 位于apache文件夹\ apache \ apache2.4.2 \ bin
中删除“;”
答案 3 :(得分:0)
添加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)