Решил данную проблему добавив к модели специальный Proxy класс, который переобразует входящие и исходящие данные к серверу.
class Service_SoapProxy
{
protected $_service;
public function __construct()
{
$this->_service = new Model_Soap();
}
public function __call($name, $arguments)
{
$params = array();
if(count($arguments) > 0){
foreach($arguments[0] as $property=>$value){
$params[$property] = $value;
}
}
$result = call_user_func_array(array($this->_service, $name), $params);
return array("{$name}Result" => $result);
}
}
После этого Soap сервер стал выглядеть следующим образом:
if ( $wsdl !== null ) {
$autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence');
$autodiscover->setBindingStyle(array('style'=>'document'));
$autodiscover->setOperationBodyStyle(array('use' => 'literal'));
$autodiscover->setClass('Model_Soap');
$autodiscover->handle();
}
elseif ($request -> isPost()) {
// Request soap
if (! empty($this -> key)) {
$wsdl = 'http://' . $hostname . '/api2/' . (is_array($this -> key) ? $this -> key['key'] : $this -> key) . '?wsdl';
}
else
$wsdl = 'http://' . $hostname . '/api2/?wsdl';
$server = new Zend_Soap_Server($wsdl, array('cache_wsdl'=>false));
$modelSoap = new Service_SoapProxy();
$server->setObject($modelSoap);
$server->handle();
}
Правда после этих изменений php не может работать с данным SOAP сервером, работать с ним может только .NET