繁体   English   中英

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

[英]Calling a C# web service from with PHP with a long parameter

我们有一个客户正试图从PHP代码调用用C#编写的Web服务。 Web服务调用将long作为参数。

对于使用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.

在不了解其实现细节的情况下,很难推测出一个好的解决方案/变通办法。

我写了一篇有关使用nuSoap调用C#Web服务的PHP的文章...尚未遇到长整型转换的问题,但我将确定运行某些测试,以查看是否应将其添加到我的文章中。 谢谢,肖恩http://seanmcilvenna.com/blog/7-general/24-windows-php-development

如果您绝对必须使用这样的大数字,则将其制成字符串,然后在Web服务中将其转换为long。

这会打扰您的其他用户,但是会使您对使用PHP的客户更加友好。

PHP残酷地谋杀了它的整数支持,以至于无法以一种可预知的方式知道它的特定安装将处理32位或64位整数。

解决此问题的最简单方法是公开一个新的接受字符串的端点,然后将其强制转换为结尾。

有关PHP史诗失败的参考:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM