長いパラメーターを使用して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ビット整数の文字列表現を型変換しようとしている場合、はい、ほとんどの場合切り捨てられているか、floatに変換されています。この簡単なテストでこの動作を確認できます
<?php
echo intval( "12345678901234567890" );
// prints 2147483647, the max value for a 32 bit signed int.
実装の詳細を知らなくても、優れたソリューション/回避策が何であるかを推測することは困難です。
他のヒント
そのような大きな数字を絶対に必要とする場合、それを文字列にして、Webサービスでlongに変換します。
これにより、他のユーザーは少し気になりますが、PHPを使用している衣装製作者にとっては使いやすくなります。
PHPは、特定のインストールが32ビットまたは64ビットの整数を処理することを予測できる方法がなくなるまで、整数サポートを残酷に殺しました。
これを処理する最も簡単な方法は、文字列を受け取る新しいエンドポイントを公開し、それを自分のエンドにキャストすることです。
PHPの叙事詩の失敗に関する参照:
nuSoapを使用してC#Webサービスを呼び出すPHPに関する記事を書きました... long int変換の問題はまだ発生していませんが、間違いなく記事に追加する必要があるかどうかを確認するためにいくつかのテストを実行します。ありがとう、ショーン http://seanmcilvenna.com/blog/7-general/24- windows-php-development