2011-05-14 65 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