2010-11-15 32 views
2

我試圖使用Zend_Soap_Client與ASP.net web服務進行通信。這裏是我的客戶打電話:Zend_Soap_Client錯誤調用ASP.net Web服務:「......不設置到對象的實例」

$client = new Zend_Soap_Client(null, array(
    'location' => 'http://example.com/service.asmx', 
    'uri' => 'http://example.com/' 
)); 

$user = new UserDetail(); 
$result = $client->UserDetails($user); 

然而,這總是給我的錯誤:

System.NullReferenceException: Object reference not set to an instance of an object. at Service.UserDetails(UserDetail UserDetail)

一些谷歌上搜索發現,這是一個相當普遍的問題。最常見的解決方案似乎是傳遞的參數爲一個數組,所以我嘗試:

$result = $client->UserDetails(array('UserDetail' => $user)); 

但是這給了相同的錯誤。我也嘗試將params作爲stdClass對象進行傳遞,將數組嵌套在另一個'params'作爲鍵,以及其他一些東西,但錯誤總是相同的。

我對Web服務本身的ASP代碼,相關的方法是:

public Result UserDetails(UserDetail UserDetail) { 

    [some stuff] 

    Hashtable ht = new Hashtable(); 
    ht = UserDetail.GenerateData(); 
} 

的錯誤是由GenerateData()調用引起的。

我承擔的UserDetails方法空讓我的對象作爲參數,而不是,但我不知道我應該如何調用該方法,否則我這怎麼能進一步調試。我發現的大部分Zend_Soap_Client示例似乎都使用WSDL,而這個服務並不是這樣;不確定這是否相關。任何幫助感謝!

回答

2

我最終解決了這個與:

$userDetails = new UserDetails(); 
$userDetails->UserDetail = $user; 

$client->UserDetails($userDetails); 

似乎ASP.net預計(和返回)到PARAMS嵌套中的對象/陣列具有相同的名稱爲被調用的方法。

0

如果您有任何可能改變asp.net代碼我建議你嘗試該方法的UserDetails的實現不帶參數只是爲了確保代碼不破。

然後我將創建在asp.net一個消費方法,調試http請求,看到了userdetail對象如何序列/以陣列形式進行細分。然後,它只是一個從php創建類似http請求的問題。

+0

我知道ASP代碼工作作爲Web服務和使用過程中。我希望避免創建自己的.net客戶端來調試它,因爲我沒有ASP開發環境,所以我會考慮我最後的選擇! – 2010-11-15 14:46:17

相關問題