2011-05-14 63 views
0

我試圖通過SOAP將我的(MySQL)數據庫的值返回給C#客戶端。PHP SOAP向客戶端返回錯誤的值

服務器用PHP編寫的,我認爲這是這裏的一切不順心:

class foo{ 
    function bar() 
    { 
     $result = $connection->query("SELECT value 
             FROM table 
             WHERE id='$id'"); 

     $row = $result->fetch_assoc(); 
     return (int)$row['value']; 
    } 
} 

將在C#轉起來爲0,不管什麼樣的價值是在數據庫中。然而,

class foo{ 
    function bar() 
    { 
     return 5; 
    } 
} 

變成了如C#中的正確的值(5在這種情況下)。

缺少什麼我在這裏?看起來,數據庫中的數據不會正確返回到C#,但在PHP中寫入相同值(靜態)的任何其他方式都會成功。

編輯: 我現在已經建立了一個PHP SOAP客戶端,它接受與C#相同的值。因此,似乎問題出現在PHP SOAP服務器上,將錯誤的值傳遞給客戶端(只要返回的值不是靜態的)。編輯: 我現在已經找到了我的問題的解決方案;我的WSDL文件有一個複雜的請求類型,即使它只需要一個簡單的類型。將此複雜類型更改爲簡單類型,解決了問題。不要問我爲什麼 - 它對我毫無意義!

+0

從'bar'返回之前,您可以在PHP中記錄值嗎?如果你從非c#客戶端調用'bar',會發生什麼? – 2011-05-14 17:44:16

+0

@Albin Sunnanbo當從另一個PHP腳本(而不是SOAP)調用bar時,該值顯示正確。 我還沒有嘗試其他類型的SOAP客戶端,而不是C#之一。 – 2011-05-14 17:46:48

+0

我會看看VS.NET生成的代理類。我不明白PHP如何告訴SOAP消費者返回類型是「int」。是否有一些PHP函數的元描述? – 2011-05-14 17:47:22

回答

0

您正在詢問關聯數組。這可能會返回更多的一個項目。

+0

感謝您的回答! 該解決方案是WSDL文檔中的內容,您可以在第一篇文章中閱讀。 另外,bar()不可能返回多個項目,因爲id(顯然是?)是唯一的,我只返回數組中的'value'。 – 2011-05-15 11:28:32