使用长参数从PHP调用C#Web服务

问题描述:

我们有一位客户试图用PHP代码调用我们用C#编写的Web服务。 Web服务调用需要很长的参数。使用长参数从PHP调用C#Web服务

此调用适用于从C#或Java调用的其他客户,但该客户从调用返回错误。我没有调试过他们的具体调用,但我猜测64位整数正在从PHP中以某种方式截断。客户说他们只是用一个字符串进行Web服务调用,但是在PHP中有一个包装类型来进行类型转换。这可能会丢失号码信息吗?

感谢您的任何信息。

大多数PHP安装将不支持64位整数 - 32是最大值。您可以通过读取PHP_INT_SIZE常量(4 = 32位,8 = 64位)或读取PHP_INT_MAX值来检查。

<?php 

echo PHP_INT_SIZE, "\n", PHP_INT_MAX; 

?> 

如果他是使用Web服务类试图类型转换为64位整数的字符串表示,那么是的,它是最有可能被截断或转换成浮动。您可以排序看到此行为与这个简单的测试

<?php 

echo intval("123456789"); 
// prints 2147483647, the max value for a 32 bit signed int. 

不知道他的执行细节,很难假定什么好的解决办法/解决方法可能是。

如果您绝对必须采用这样的大数字,请将其设置为一个字符串,然后在您的Web服务中将其转换为long。

这会让您的其他用户感到困扰,但会让您的PHP使用者更加友好。

PHP野蛮地杀害了它的整数支持,直到你没有可预见的方式知道它的具体安装将处理32位或64位整数。

处理这个问题的最简单方法是公开一个接受字符串的新端点,并将其转换到最后。

有关PHP的史诗参考失败:

http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/

我写了一封关于使用的NuSOAP调用C#Web服务PHP的文章......还没有遇到长整型转换的问题,但我肯定会进行一些测试,看看我是否应该将其添加到我的文章中。谢谢,肖恩 http://seanmcilvenna.com/blog/7-general/24-windows-php-development