Php SoapClient WSA Action To Hatası
Hata mesajı:
errors:
1) The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree.
2) The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/SoapService/login'
Php ile bir başka servise soap isteği atıldığında aşağıdaki gibi bir hata alınıyor ise soap header da action ve to parametreleri eklenerek soap servisin yollu belirtilmelidir. daha sonra soap servis methoduna istek atıldığında headerBody de birleştirilip gönderilmeldir.
<?php
ini_set("soap.wsdl_cache_enabled","0");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$url = 'http://test.com/SoapService.svc?wsdl';//change
$client = new SoapClient($url,array('soap_version' => SOAP_1_2,
'trace' => 1,'exceptions'=> false));
$wsa_namespace = 'http://www.w3.org/2005/08/addressing';
$NS_ADDR = 'http://www.w3.org/2005/08/addressing';
$ACTION_ISSUE = 'http://tempuri.org/SoapService/login';//change
$ACTION_ADDR = 'http://test.com/SoapService.svc';//change
$action = new SoapHeader($NS_ADDR, 'Action', $ACTION_ISSUE, true);
$to = new SoapHeader($NS_ADDR, 'To', $ACTION_ADDR, false);
$headerbody = array('Action' => $action,'To' => $to);
$client->__setSoapHeaders($headerbody);
$parameters = array('username'=>'abc','password'=>'123');//change
$result = $client->__soapCall('login',$parameters);//change
echo '<pre>';print_r($result);exit();
soapUI
ilgili method açılarak alt menuden WS-A menusu açılır ve görseldeki görüntü gelir.
action ve to daki alanlar soap servisin url ile doldurulur.
action: http://tempuri.org/SoapService/login
to: soap-servis-url/SoapService.svc