PHP вызывает службу WCF с использованием WSHttpBinding

В настоящее время я работаю над службой WCF, которая использует WSHttpBinding. Пока что сервис отлично работает с приложениями .NET. Однако, когда дело доходит до использования этого сервиса в PHP, я получаю сообщение об ошибке. Ошибка вызвана тем, что PHP отправляет null в качестве параметра службам WCF.

Договор на обслуживание выглядит следующим образом:

[ServiceContract]
public interface IWebsite : IWcfSvc
{
[OperationContract]
[FaultContract(typeof(ServiceException))]
ResponseResult LostPassword(RequestLostPassword request);
}

Контракт данных, который используется для параметров, выглядит следующим образом:

[DataContract]
public class RequestLostPassword
{
[DataMember(IsRequired = true)]
public string Email { get; set; }

[DataMember(IsRequired = true)]
public string NewPassword { get; set; }

[DataMember(IsRequired = true)]
public string CardNumber { get; set; }

[DataMember(IsRequired = true)]
public DateTime RequestStart { get; set; }
}

Поскольку я не эксперт, мне потребовалось некоторое время, чтобы заставить работать PHP-код, но в итоге я написал такой скрипт:

$parameters = array(
'Email' => "[email protected]",
'NewPassword' => "test",
'CardNumber' => "1234567890",
'RequestStart' => date('c')
);

$svc = 'Website';
$port = '10007';
$func = 'LostPassword';
$url = 'http://xxx.xxx.xxx.xxx:'.$port.'/'.$svc;

$client = @new SoapClient(
$url."?wsdl",
array(
'soap_version' => SOAP_1_2,
'encoding'=>'ISO-8859-1',
'exceptions' => true,
'trace' => true,
'connection_timeout' => 120
)
);

$actionHeader[] = new SoapHeader(
'http://www.w3.org/2005/08/addressing',
'Action',
'http://tempuri.org/I'.$svc.'/'.$func,
true
);

$actionHeader[] = new SoapHeader(
'http://www.w3.org/2005/08/addressing',
'To',
$url,
true
);

$client->__setSoapHeaders($actionHeader);
$result = $client->__soapCall($func, array('parameters' => $parameters));

Я не понимаю, почему он не передает параметры службе WCF. У меня есть другой сервис, который работает просто отлично, хотя это не требует параметров. Может кто-нибудь объяснить, почему это происходит? Я полный нуб PHP и просто хочу, чтобы это работало как пример для парня, который разрабатывает сайт.

0

Решение

Мы нашли ответ!
Строка кода ниже:

$result = $client->__soapCall($func, array('parameters' => $parameters));

Должен быть изменен на:

$result = $client->__soapCall($func, array('parameters' => array('request' => $parameters)));

Очевидно, вам нужно сообщить PHP, что ваши параметры вложены в массив, называемый «запрос», который вложен в массив, называемый параметрами, когда вы хотите вызвать службу WCF с datacontract в качестве объекта запроса.

1

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

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

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