【问题标题】:SOAP Server with CodeIgniter带有 CodeIgniter 的 SOAP 服务器
【发布时间】:2011-09-12 11:35:38
【问题描述】:

我正在扩展一个用 CI 编写的 webapp 以与 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 相同。

更新 - 2011 年 9 月 12 日

我想通了...如果已经设置了整个对象 $this,则无需使用 addFunction()。 SOAP 将仅调用 wsdl 文件中声明的函数,无论如何我似乎无法将函数设置为私有/受保护。

话虽如此,我不确定是否继续使用 SOAP...tutorial written by Phil Sturgeon 展示了使用 REST 方法返回不同响应类型(json、xml、序列化、csv)的良好解决方案。

【问题讨论】:

    标签: php codeigniter soap


    【解决方案1】:

    更完整?怎么样?

    SOAP 是一种定义更明确、类型更明确的传输协议,但仅仅发送数据就非常复杂。 WSDL 对我来说是一层不必要的复杂性。它只是用来告诉客户端和服务器数据是什么类型,但是 PHP 并不关心类型,为什么要使用它呢?

    REST 和 JSON = 快速简单
    SOAP 和 XML = 又慢又丑

    【讨论】:

    • 感谢您的回复!所以,我知道 PHP 不需要这个协议,但是 VB 应用程序呢?我想让需要接口我的应用程序的开发人员的生活更轻松,而且我知道许多 VB 开发人员都熟悉 SOAP。用VB解析JSON更容易吗?
    【解决方案2】:

    如果你使用 NuSOAP 类,那么 WSDL 就没有问题。你只需要像这样调用你的服务器:

    http://yoururl/api?wsdl
    

    NuSOAP 将为您生成 WSDL。我有一些由 NuSOAP 开发的 SOAP 服务,并且在任何语言中都像魅力一样工作。支持 SOAP。

    祝你好运!

    【讨论】:

      【解决方案3】:

      试试这个

      <?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;
      }
      
      }
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 2023-03-27
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2016-12-18
      相关资源
      最近更新 更多