我試圖通過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文件有一個複雜的請求類型,即使它只需要一個簡單的類型。將此複雜類型更改爲簡單類型,解決了問題。不要問我爲什麼 - 它對我毫無意義!
從'bar'返回之前,您可以在PHP中記錄值嗎?如果你從非c#客戶端調用'bar',會發生什麼? – 2011-05-14 17:44:16
@Albin Sunnanbo當從另一個PHP腳本(而不是SOAP)調用bar時,該值顯示正確。 我還沒有嘗試其他類型的SOAP客戶端,而不是C#之一。 – 2011-05-14 17:46:48
我會看看VS.NET生成的代理類。我不明白PHP如何告訴SOAP消費者返回類型是「int」。是否有一些PHP函數的元描述? – 2011-05-14 17:47:22