2008-10-14 4 views
1

У нас есть клиент, который пытается вызвать наш веб-сервис, написанный на C#, из PHP-кода. Вызов веб-службы занимает длинный параметр.Вызов веб-службы C# с помощью PHP с длинным параметром

Этот звонок отлично работает для других клиентов, звонящих с C# или Java, но у этого клиента появляется ошибка от вызова. Я не отлаживал их конкретный вызов, но я предполагаю, что 64-битное целое каким-то образом усекается с PHP. Клиент говорит, что они просто делают вызов веб-службы со строкой, но там есть оболочка на PHP, которая делает преобразование типа. Может ли это потерять информацию о количестве?

Спасибо за любую информацию.

ответ

1

Большинство установок PHP не поддерживают 64-битные целые числа - 32 - это макс. Вы можете проверить это, прочитав константу PHP_INT_SIZE (4 = 32 бит, 8 = 64 бит) или прочитав значение PHP_INT_MAX.

<?php 

echo PHP_INT_SIZE, "\n", PHP_INT_MAX; 

?> 

Если класс веб-службы, он использует пытается ввести конвертирование строковое представление 64 битного целого числа, то да, это в основном, вероятно, усекается или преобразуется в поплавок. Вы можете сортировать видеть это поведение с помощью этого простого теста

<?php 

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

Не зная подробности его реализации, трудно предположить о том, что может быть хорошим решением/обходной путь.

0

Если вы абсолютно должны принять такое большое количество, сделайте его строкой и конвертируйте ее в свой веб-сервис.

Это немного беспокоит ваших пользователей, но сделает его более дружелюбным к вашим клиентам, использующим PHP.

0

PHP жестоко убил свою целую поддержку, до такой степени, что у вас нет предсказуемого способа узнать, что конкретная установка будет обрабатывать 32-битные или 64-битные целые числа.

Самый простой способ справиться с этим состоит в том, чтобы выставить новую конечную точку, которая берет строку, и просто бросать ее на вашем конце.

Для справки на эпосе РНР неудачу:

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

0

Я написал статью о PHP с использованием NuSOAP для вызова C# веб-службы ... Вы еще не сталкивались проблемы с длинными Int преобразования, но Я определенно буду запускать некоторые тесты, чтобы посмотреть, добавить ли я его в свою статью. Спасибо, Шон http://seanmcilvenna.com/blog/7-general/24-windows-php-development

Смежные вопросы