Мобильный SOAP через JSON-шлюз Emission-Framework
От: emission-framework  
Дата: 30.09.10 15:37
Оценка:
Всем доброе время суток.

Вопрос довольно актуален — как достучаться к 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();


Это пригодится в экспериментах с кодом!

Всем удачи! Жду фидбеков!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.