SOAP-сервер с CodeIgniter - PullRequest
       3

SOAP-сервер с CodeIgniter

1 голос
/ 12 сентября 2011

Я расширяю веб-приложение, написанное на CI, для взаимодействия с Visual Basic.

Прежде всего я хотел бы знать, является ли выбранное мною решение хорошим вариантом ... Ранее я работал с xml-rpc и положил руки на службу REST, но для меня SOAP-решения выглядят более полными. Я не прав?

В любом случае, проблема до сих пор в том, что я не могу вызвать функцию внутри моего контроллера ... вот мой код:

class Webservice extends CI_Controller {

    function  __construct() {
        parent::__construct();
    }

    public function index() {
        $server = new SoapServer("http://www.site.com/test.wsdl");
        $server->setObject($this);
        //$server->addFunction('sayHello');
        $server->handle();
    }

    function sayHello($name) {
        $salute = "Hi " . $name . ", it's working!";
        return $salute;
    }

}

Я скомпилировал файл wsdl, но после того, как я позвонил на site.com/webservice, я получил следующую ошибку:

SoapServer :: addFunction () [soapserver.addfunction]: попытался добавить несуществующую функцию sayHello

Я также пытался передать $ CI = & get_instance () в $ server-> setObject (), но я думаю, что это то же самое, что передать $ this.

ОБНОВЛЕНИЕ - 12.09.2011

Я понял это ... нет необходимости использовать addFunction (), если уже установлен весь объект $ this. SOAP будет вызывать только функции, объявленные в файле wsdl, в любом случае кажется, что я не смог установить функцию как privete / protected.

Сказав, что я не уверен, что буду продолжать работу с SOAP ... учебное пособие , написанное Филом Стерджоном , демонстрирует хорошее решение с использованием подхода REST, которое возвращает разные типы ответов (json, xml, serialize, CSV).

Ответы [ 3 ]

6 голосов
/ 12 сентября 2011

Более полно?Как это так?

SOAP - гораздо более определенный и типизированный протокол передачи, но он чертовски сложен для простой передачи данных.WSDL для меня это уровень сложности, который не нужен.Он используется только для того, чтобы сообщить клиенту и серверу, какой тип данных, но PHP не заботится о типе, так зачем его использовать?

REST и JSON = быстро и просто
SOAP и XML= медленнее и неуклюже

1 голос
/ 16 июля 2012

Если вы используете класс NuSOAP, то WSDL не является проблемой.Вам просто нужно позвонить на ваш сервер как:

http://yoururl/api?wsdl

, и NuSOAP сгенерирует WSDL для вас.У меня есть некоторые SOAP-сервисы, разработанные NuSOAP, и все они работают как шарм на любом языке.которые поддерживают SOAP.

Удачи!

0 голосов
/ 13 февраля 2017

попробуйте

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');

ini_set("soap.wsdl_cache_enabled", "0");
$srv = new SoapServer("http://www.example.com/test.wsdl");
$srv->setClass('Webservice');
$srv-> addFunction(SOAP_FUNCTIONS_ALL);
$srv->handle();


class Webservice extends CI_Controller {

function  __construct() {
    parent::__construct();
}

public function index() {
}

function sayHello($name) {
    $salute = "Hi " . $name . ", it's working!";
    return $salute;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...