使用带有long参数的PHP调用C#Web服务
-
03-07-2019 - |
题
我们有一位客户试图用PHP代码调用我们用C#编写的Web服务。 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( "12345678901234567890" );
// prints 2147483647, the max value for a 32 bit signed int.
在不了解其实施细节的情况下,很难假设一个好的解决方案/解决方案可能是什么。
其他提示
如果您绝对必须使用这样的大数字,请将其设为字符串,并在Web服务中将其转换为long。
这会让你的其他用户感到烦恼,但会让你对使用PHP的客户更友好。
PHP残忍地谋杀了它的整数支持,以至于您无法预知某个特定安装将处理32位或64位整数。
处理此问题的最简单方法是公开一个带有字符串的新端点,然后将其投射到最后。
关于PHP的史诗失败的参考:
我写了一篇关于PHP的文章,使用nuSoap来调用C#Web服务......还没有遇到长int转换的问题,但我肯定会运行一些测试,看看是否应该将它添加到我的文章中。谢谢,肖恩 http://seanmcilvenna.com/blog/7-general/24-窗口 - PHP-发展
不隶属于 StackOverflow