2011-02-05 105 views
2

我无法调用从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如果这是任何帮助。我在不同的论坛上经历了很多帖子,试图找出问题所在。很多人都遇到同样的问题,但迄今为止我找到的解决方案都不适合我。任何帮助将不胜感激。

+0

工作,我不知道这是什么可能,但是,是否有可能为你尝试的NuSOAP? – Nacho 2011-03-10 01:37:43

+0

尝试在创建SoapClient对象的地方围绕行包装try..catch块。不要忘了catch应该是一个SoapFault类型 - 例如catch(SoapFault $ e){}而不是catch(Exception $ e){} 在catch中,可以查询异常字段,(getMessage等)或var_dump例外,然后发布它告诉你的内容。 – Stephen 2011-03-10 03:44:49

+0

你可以发布wsdl吗? – zode64 2011-03-12 00:39:40

回答

0

如果你正在使用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。

1

另一个选项是cURL。您可以将您的有效内容创建为XML字符串,并使用cURL将其发送到相同的URL。然后,您需要捕获响应代码并酌情处理。当我遇到SOAPClient的问题时,我转移到cURL--像魅力一样工作。

0

尝试打开php.ini中的php_soap.dll和php_openssl.dll。 位于apache文件夹\ apache \ apache2.4.2 \ bin

删除“;”

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) 
相关问题