2011-02-05 69 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) 
相關問題