Как интегрировать код PHP с веб-сервисом WCF с помощью Message Security - PullRequest
0 голосов
/ 07 мая 2018

Добрый день.

Я хочу интегрировать веб-сервис 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 ограничен в отношении возможности интеграции с веб-службой WCF Message Security?

Спасибо. Daleen

1 Ответ

0 голосов
/ 07 мая 2018

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

Попробуйте использовать класс SoapHeader, чтобы исправить свой код:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...