Windows — Как интегрировать код PHP с веб-сервисом WCF с помощью Message Security

Добрый день.

Я хочу интегрировать веб-сервис WCF с Message Security из PHP. Веб-сервис ожидает сертификат от клиента (код PHP) и не требует никаких имен пользователей и паролей. Он также использует wsHttpBinding.
У меня есть компьютер под управлением Windows x64 с IIS7, и я могу выполнить код php из моего браузера.

Я попытался использовать SoapClient () в PHP со следующим кодом:

<?php

ini_set("soap.wsdl_cache_enabled", "0");

try
{
$context = stream_context_create(["ssl" => ["local_cert" => "./cert/TestClient.pem", "CN_Name => CN=TestClient"]]);
$options = ["soap_version" => SOAP_1_2, "authentication" => SOAP_AUTHENTICATION_DIGEST, "context" => $context];
$service = new SoapClient("http://vanzyld:49321/pointerws/?wsdl", $options);

$service->GetVehicleList([3538]);
}
catch (SOAPFault $f)
{
error_log('ERROR => '.$f);
}

?>

но,

С SOAP_1_2 это ошибка, которая возвращается из вызова:

ERROR => SoapFault exception: [HTTP] Error Fetching http headers in C:\inetpub\phproot\WebService\GetVehicles.php:16
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://vanzyld:...', 'http://pointers...', 2, 0)
#1 C:\inetpub\phproot\WebService\GetVehicles.php(16): SoapClient->__call('GetVehicleList', Array)
#2 {main}

И с SOAP_1_1 этот возвращается.

ERROR => SoapFault exception: [HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. in C:\inetpub\phproot\WebService\GetVehicles.php:16
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://vanzyld:...', 'http://pointers...', 1, 0)
#1 C:\inetpub\phproot\WebService\GetVehicles.php(16): SoapClient->__call('GetVehicleList', Array)
#2 {main}

После долгих исследований выяснилось, что SoapClient не очень хорошо обрабатывает вызовы к веб-службе WCF, которая реализует Message Security.
Одно из предложений было (отсюда: Как безопасно общаться между PHP и WCF) что я устанавливаю сторонний пакет из WSO2, но это также, кажется, не лучший путь, поскольку WSO2 больше не поддерживает это. Я также не смог запустить установку WSF на моем ПК, даже выполнив все шаги по установке wsf на мой компьютер. (https://wso2.com/project/wsf/php/2.0.0/docs/install_guide.html — Я выполнил шаги 2.1 и 2.4) Раздел WSF никогда не появлялся на моей странице phpinfo как включенный. Ошибка PHP, которая была возвращена после установки WSF, заключалась просто в том, что код не смог найти класс WSClient ().

Существуют ли какие-либо другие классы, библиотеки или сторонние объекты PHP, которые можно использовать для успешной интеграции кода PHP с веб-службой WCF, использующей Message Security? Или есть способ для SoapClient () на самом деле работать с этим видом службы WCF? Или PHP просто ограничен в отношении возможности интеграции с веб-службой Message Security WCF?

Спасибо.
Daleen

0

Решение

В обоих случаях у вас появляются ошибки с заголовками. Вам сообщают об этом явно с ошибкой SOAP_1_2, ошибка SOAP_1_1 жалуется на то, что установлен неправильный тип контента, что означает, что на самом деле заголовок типа контента не был отправлен правильно.

Попробуйте использовать SoapHeader класс для исправления вашего кода:

http://php.net/manual/en/class.soapheader.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]