Как это сделать? Мне нужно вызвать веб-сервис изнутри PHP, который не будет выполняться Apache асинхронно. Каково ваше предложение? Лучше написать код на C или C ++ вместо PHP? Поскольку NuSoap уже установлен, я предпочитаю избегать участия в gSoap. С NuSoap я могу вызывать веб-сервис другого сервера с меньшими усилиями. Мне нужен демон для опроса вызова веб-службы и хранения возвращенных данных в качестве кэша на первом сервере.
Вы можете спросить, почему асинхронный вызов? Это потому, что второй сервер может быть не один. Получение ответа от вторых серверов может занять некоторое время, и в течение этого времени я предпочитаю отправлять запрос на другие серверы для получения параллельных ответов. Это помогает мне получать все ответы в более короткие сроки.
Обновить:
Объект System.Web.Services.Protocols.SoapHttpClientProtocol используется для связи с веб-службами на стороне сервера, которая обрабатывается NuSoap. Запросы адресованы главному серверу или федеративным серверам. В последнем случае они маршрутизируются через главный сервер. В настоящее время мы используем следующий механизм для вызова веб-служб, расположенных на федеративных серверах:
$SoapClient = GetSoapClient($ServerId, $SessionId);
$result = $SoapClient->call(
"WebServiceName",
array(
'Parameter1' => $Value1,
'Parameter2' => $Value2,
...
)
);
в то время как функция GetSoapClient определяет как:
function GetSoapClient($ServerId, $LocalSessionId)
{
try
{
$srv = dbFetchOne("SELECT * FROM Servers WHERE id = ".intval($ServerId));
$wsdlUrl = "http://".$srv['IP'].":".$srv['Port']."/webService.php?wsdl";
$cache = new wsdlcache('/tmp');
$wsdl = $cache->get($wsdlUrl);
if (is_null($wsdl))
{
$wsdl = new wsdl($wsdlUrl);
if ($wsdl && $wsdl->getError() === false)
$cache->put($wsdl);
}
$client = new nusoap_client($wsdl, true, '', '', '', '');
$err = $client->getError();
if ($err)
{
error_log("Constructor error".$err);
}
$client->requestHeaders = array('LocalSessionId' => $LocalSessionId);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
return $client;
}
catch (Exception $e)
{
return null;
}
}
В соответствии с этим, что может быть кратчайшим путем и лучшим способом для реализации того, что я спрашиваю?
Спасибо за внимание.
PS. серверные коды в PHP.
Задача ещё не решена.
Других решений пока нет …