Chamar um serviço Web C # a partir de PHP com um longo parâmetro
-
03-07-2019 - |
Pergunta
Temos um cliente que está tentando chamar o nosso serviço web escrito em C # a partir do código PHP. A chamada de serviço web leva muito como parâmetro.
Essa chamada funciona bem para outros clientes que ligam do C # ou Java, mas este cliente está recebendo uma volta de erro da chamada. Eu não tenho depurado seu chamado específico, mas eu estou supondo que o número inteiro de 64 bits está sendo truncado de alguma forma de PHP. O cliente diz que eles estão apenas fazendo a chamada de serviço web com uma corda, mas há um invólucro em PHP que faz a conversão de tipo. Poderia ser este perder as informações número?
Obrigado por qualquer informação.
Solução
instalações mais PHP não vai apoiar 64 bit inteiros - 32 é o máximo. Você pode verificar isso lendo a constante PHP_INT_SIZE (4 = 32 bits, 8 = 64 bits) ou ler o valor PHP_INT_MAX.
<?php
echo PHP_INT_SIZE, "\n", PHP_INT_MAX;
?>
Se a classe de serviço web que ele está usando está tentando digitar-converter uma representação de cadeia de um número inteiro de 64 bits, então sim, é mais provável a ser truncado ou convertido em um float. Você pode tipo de ver esse comportamento com este teste simples
<?php
echo intval( "12345678901234567890" );
// prints 2147483647, the max value for a 32 bit signed int.
Sem saber os detalhes de sua implementação, é difícil postulado sobre o que uma boa solução / solução alternativa poderia ser.
Outras dicas
Se você absolutamente deve ter um grande número assim, torná-lo uma corda, e convertê-lo para muito tempo em seu serviço web.
Isso vai incomodar seus outros usuários um pouco, mas torná-lo mais amigável para seus clientes-usando PHP.
PHP brutalmente assassinado seu apoio inteiro, até o ponto onde você não tem nenhuma forma previsível de saber que instalar um específico irá lidar com inteiros de 32 bits ou de 64 bits.
A maneira mais fácil de lidar com isso seria para expor um novo ponto de extremidade que recebe uma string, e apenas lançá-lo em seu final.
Para referência no épico de PHP falhar:
Eu escrevi um artigo sobre PHP usando NuSOAP chamar um serviço C # web ... ainda não encontrou o problema com conversões int longos, mas eu definitivamente a execução de alguns testes para ver se eu adicioná-lo em meu artigo . Obrigado, Sean http://seanmcilvenna.com/blog/7-general/24- windows-php-desenvolvimento