Всем доброе время суток.
Вопрос довольно актуален —
как достучаться к SOAP веб-службе (например WCF) с мобильного клиента?
Тот, кто писал под
iPhone, знает, что проблема не простая. На
JaveME — тем более. На других платформах типа
Bada — не знаю.
Android — не особо полезная вещь (там есть
Apache Axis), но может пригодиться.
Лично мне пришлось написать собственное решение. И я включил его в состав своей PHP библиотеки.
Если кто знает другое решение, которое действительно работает — пишите в ветку.
Вот моя статья на тему.
http://emission-framework.com/article/vitche.wordpress.com/php-framework/iphone-json-soap-client-vitche-emission-php-framework.html
Общий алгоритм работы следующий:
1. Мобильный клиент обращается на
PHP сервер через
REST интерфейс посредством самого обыкновенного HTTP запроса;
2. Веб-служба на стороне
Emission-Framework получает
REST запрос и шлюз превращает его в SOAP-запрос;
3. SOAP-запрос выполняется с помощью
SoapClient — встроенного класса
PHP;
4. Результат сериализуется в
JSON и возвращается назад клиенту.
Предполагаем, что разобрать
JSON для мобильного клиента — не проблема.
Вот код шлюза из моей библиотеки:
<?php
/**
* PHP Framework Integration HTTP-to-SOAP Gateway Web Service class
* This service makes SOAP services available to callers through the usual
* HTTP REST interface
**/
/**
* Description of HTTPSOAPGatewayWebService
*
* @author Andrew <andrew@vitche.com>
* @author Frozen Rain <frozenrain@mail.ru>
**/
class HTTPSOAPGatewayWebService extends HTTPWebService {
function __construct() {
parent::__construct('');
}
function onMethodCall($strClassName, $strMethodName, $arRequest) {
// Parse request
$url = null;
$arguments = array();
foreach ($arRequest as $key => $value) {
if ('url' == $key) {
$url = $value;
} else {
$arguments[$key] = $value;
}
}
$reference = new SOAPWebServiceReference($url);
return JSONSerializer::toString($reference->execute($strMethodName, $arguments));
}
}
?>
Всех, кого эта тема заинтересовала, просьба писать мне или на

.
И, на последок,
REST веб-службы в библиотеке
Vitche Emission Framework запускаются на выполнение так:
new HTTPSOAPGatewayWebService();
Это пригодится в экспериментах с кодом!
Всем удачи! Жду фидбеков!